;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Diretor de Sonic fala de fracasso de 1° trailer: 'Me lembro todos os dias'

Sonic 2 ganhou seu primeiro trailer durante a Gamescon 2021 - Divulgação/ Paramount
Sonic 2 ganhou seu primeiro trailer durante a Gamescon 2021 Imagem: Divulgação/ Paramount

Fernanda Talarico

De Splash, em São Paulo

15/12/2021 04h00

O personagem dos videogames Sonic ganhou o primeiro trailer do seu filme que misturava live-action com animação no dia 30 de abril de 2019. No entanto, as reações dos fãs quanto ao visual do querido ouriço azul foram péssimas e levaram a produção a sofrer diversas alterações. O conteúdo foi removido e, à época, rumores diziam que a Paramount Pictures chegou a gastar US$ 5 milhões na mudança de design.

Para Jeff Fowler, diretor do longa, aquele fatídico evento ficou gravado na memória. "Todos os dias eu me lembro de 30 de abril de 2019", brincou sobre o assunto em conversa com Splash. "Acordo com medo de estar revivendo todo aquele pesadelo", diz o cineasta ao relatar a dificuldade de lidar com as reações negativas, mas que o fizeram aprender bastante.

Primeira imagem de Sonic no trailer - Divulgação/ Paramount Pictures - Divulgação/ Paramount Pictures
Primeira imagem de Sonic no trailer
Imagem: Divulgação/ Paramount Pictures

Depois das mudanças, "Sonic: O Filme" chegou aos cinemas e foi um sucesso de bilheteria, arrecadando US$ 319 milhões mundialmente. Com a recepção positiva, o segundo filme foi encomendado e o primeiro trailer foi lançado durante a Gamescon 2021 — evento voltado ao mercado de games — e, diferente de 2019, foi muito bem recebido.

O bom dos dias ruins é que faz com que dias como estes sejam muito especiais.
Disse sobre o lançamento da nova prévia.

Para não repetir o erro, Fowler contou ter escutado bastante a opinião dos fãs. "Trabalhamos duro para fazer tudo o que podíamos e fazer o melhor para eles."

Quanto às novidades, o novo trailer traz os personagens Tails e Knuckles. As vozes originais são feitas por Collen O'Shaughnessey, a dubladora original da série e dos jogos "Sonic Boom", e Idris Elba ("Velozes e Furiosos: Hobbs & Shaw").

Faremos o Knuckles que o público espera. Você quer que ele seja um vilão à altura de Sonic. Ele testará o herói e fará com que o protagonista mostre quais sãos os seus verdadeiros poderes.

Jim Carrey de volta

Os novos personagens se juntam ao Dr. Robotinik, o antagonista do primeiro filme vivido por Jim Carrey. Para o diretor, trabalhar ao lado de um ator como ele foi um grande privilégio.

Acho difícil acreditar que eu trabalhei em dois filmes com ele. Ele é uma pessoa incrível, muito talentosa que traz muitas ideias para os sets, além de amar os personagens.

"Ele ama o Dr. Robotinik e faz comentários hilários o tempo todo que ajudam bastante no desenvolvimento do personagem. Ele é o melhor e eu tenho muita sorte de trabalhar com ele", finalizou.

via GIPHY

Mais ação ainda?

Como "Sonic: O Filme 2" chega aos cinemas apenas em abril de 2022, o diretor não revelou muitos detalhes sobre a nova produção, mas contou que é "um filme muito maior, com muita ação, mais humor e também bastante coração".

Jeff Fowler aproveitou a conversa para dizer que ama os fãs brasileiros e agradeceu pelo púbico do país ter deixado "Sonic: O Filme" como o primeiro das bilheterias do país por diversas semanas.

Eu espero que vocês surtem com o novo longa. Eu realmente acho que podemos dar para vocês o filme de Sonic que vocês tanto querem.