;(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

Go-tcha: "com a pulseira, pego Pokémon sem nem tocar no celular"

Pulseira para pegar Pokémon é discreta e deixa o jogo mais prático - Vinícius de Oliveira/UOL
Pulseira para pegar Pokémon é discreta e deixa o jogo mais prático Imagem: Vinícius de Oliveira/UOL

Vinícius de Oliveira

Colaboração para Tilt

12/11/2019 04h00

Desde o lançamento de "Pokémon GO", em julho de 2016, a Niantic - empresa responsável pelo desenvolvimento do aplicativo - prometeu um ório que possibilitasse que os usuários capturassem seus monstrinhos de bolso favoritos sem abrir a tela do celular. E assim nasceu a Pokémon Go Plus, uma pulseira lançada dois meses após o jogo.

Devido às suas diversas limitações, não demorou muito para que uma pulseira melhor e muito mais prática fosse lançada na concorrência. É o caso do Go-tcha, um ório não-oficial criado pela Datel e que possibilita a qualquer jogador de "Pokémon GO" pegar os personagens da franquia de forma automática e sem muito esforço.

Um amigo trouxe um desses para mim dos Estados Unidos em março de 2018, apesar das ressalvas de que ele poderia parar de funcionar a qualquer momento. Um ano e oito meses depois, continuo capturando Pokémon sem problema algum.

Um dos maiores desafios de "Pokémon GO" é que você precisa pegar uma grande quantidade de monstros de bolso para conseguir evoluí-los e, para encontrá-los, é preciso estar em movimento. Ao conectar a Go Plus no jogo, toda vez que você a por um Pokémon ou por uma Poképarada, ela vibra e você precisa apertar um botão central do ório para capturar o personagem ou ganhar novos itens.

Já o Go-tcha é muito mais prático. Ele pega automaticamente os Pokémon por onde você a, além de girar Poképaradas para conseguir itens como Pokébolas e Frutas. Outro motivo que me levou a escolher a pulseira foi o fato de ela ter uma bateria recarregável, enquanto a da Niantic utiliza bateria de lítio que precisa ser trocada com frequência por causa da incessante vibração.

O design também ajudou na escolha final. Enquanto o Go-tcha visualmente se aproxima muito de uma Mi Band, a pulseira da Xiaomi, a Go Plus tem formato de Pokébola, deixando extremamente claro para qualquer um que ela só serve para isso.

O único fator contra é que o ório da Datel custa, em média, US$ 40. Já a pulseira da Niantic sai pela metade do preço, cerca de US$ 20.

A caixinha que o Go-tcha vem é bastante simples. Dentro dela há um pequeno manual de instruções, explicando o significado dos símbolos na tela de LED; uma pulseira branca com detalhes em preto e vermelho; o carregador; e, é claro, o ório. Para usar a primeira vez, é aconselhável baixar um aplicativo que irá atualizar a versão da pulseira para a mais recente, garantindo a compatibilidade com o "Pokémon GO".

Por meio do app ou da tela de toque, é possível desabilitar as funções automáticas de capturar Pokémon ou de girar Poképaradas para ganhar itens. Você também pode escolher se quer que o Go-tcha vibre ou não. No meu caso, eu desabilitei a vibração para a bateria durar o máximo possível.

Aproveitei e pedi também para o meu amigo trazer pulseiras de outras cores para uso mais discreto no dia a dia. Costumo utilizar uma de cor preta, que deixa o Go-tcha muito parecido com uma Mi Band. Seu disfarce só é revelado quando alguém me pergunta que horas são, pois o ório da Datel não funciona como relógio.

Apesar da ressalva de muitos jogadores de que o Go-tcha poderia parar de funcionar a qualquer momento, por ser um ório não-oficial, até hoje não tive problemas com ele. Sempre conecto minha pulseira antes de sair de casa para ir ao trabalho ou à academia e, assim, pego diversos Pokémon no caminho.

Como o modo de captura funciona em segundo plano, ainda posso utilizar o celular para mexer nas minhas redes sociais, escutar música ou, até mesmo, jogar outros games.

O jeito mais fácil de comprar um Go-tcha, para quem mora no Brasil, é em marketplaces como o Mercado Livre, com preços a partir de R$ 299. Caso alguém possa trazer para você dos Estados Unidos, você encontra o ório da Datel sendo vendido a partir de US$ 40 (cerca de R$ 160, na conversão direta sem impostos) na loja da Amazon norte-americana.

A cada 15 dias, Tilt te mostra algum produto que não está disponibilizado oficialmente no Brasil para você entender para que as pessoas usam essas tecnologias vendidas no exterior.

SIGA TILT NAS REDES SOCIAIS