GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Ontem à(s) 18:28

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16


Ajuda a reduzir o peso de processamento de engine

4 participantes

Ir para baixo

Ajuda a reduzir o peso de processamento de engine Empty Ajuda a reduzir o peso de processamento de engine

Mensagem por bootzin Ter 02 Abr 2013, 21:22

Aí galera.. Eu estou no terceiro ano e com pouco tempo para me dedicar ao GM, mas gostaria de pedir uma ajuda de vocês nessa minha engine..
Não sei se você já ouviram falar na Conjectura de Collatz
Mas resumidamente é o seguinte:
Se você pegar um número qualquer natural 'a' e aplicar as seguintes regras sucessivamente
Se a = par >>> a = a/2
Se a = ímpar >>> a = 3a+1
O resultado final obrigatoriamente será 1
Exemplo:
a = 20
20/2 = 10
10/2 = 5
3*5 = 15 +1 = 16
16/2 = 8
8/2 = 4
4/2 = 2
2/2 = 1
Isso acontecerá independentemente do número que você coloque, desde que ele seja natural positivo.

A engine que eu criei faz exatamente esses cálculos, e imprime na tela os números ímpares.
No entanto, quando se aproxima de números com um número um pouco maior de casas (Cerca de 19) a engine trava por se sobrecarregar.
Então.. Indo ao pedido de ajuda.. Eu queria saber se vocês conseguem me ajudar a reduzir o uso de processamento dessa engine, alterando os códigos, reduzindo as variáveis ou algo do tipo.. Além disso, se desse pra vocês ajustarem o código draw de modo que todo valor ficasse permanentemente impresso na tela (E não fosse substituído, como é o que acontece), eu também aradeceria (:

Aqui está o download da minha engine (autoria própria):
CCC

Se vocês puderem me ajudar, ela é relativamente simples, com um único objeto e uma room. E ela funciona inserindo-se o valor desejado e então pressionando-se a tecla "enter" toda vez que um número for impresso na tela (Fiz isso pra eu poder analisar os valores encontrados). Se vocês quiserem apenas olhar os códigos que eu uso aqui estão:
Spoiler:

Agradeço desde já,
Bootzin
bootzin
bootzin

Data de inscrição : 28/01/2010
Reputação : 5
Número de Mensagens : 136
Prêmios : Ajuda a reduzir o peso de processamento de engine Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Ajuda a reduzir o peso de processamento de engine Empty Re: Ajuda a reduzir o peso de processamento de engine

Mensagem por Kabeção Qua 03 Abr 2013, 12:08

Variáveis tem limite de tamanho.
Se exceder esse limite naturalmente o programa trava.
Não há muito o que se fazer contra isso...
Kabeção
Kabeção

Games Ranking : Sem avaliações

Data de inscrição : 08/06/2008
Reputação : 100
Número de Mensagens : 2314
Prêmios : Ajuda a reduzir o peso de processamento de engine Empty

Medalhas x 0 Tutoriais x 7 Moedas x 0

Ouro x 3 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://blackcapapps.blogspot.com.br/

Ir para o topo Ir para baixo

Ajuda a reduzir o peso de processamento de engine Empty Re: Ajuda a reduzir o peso de processamento de engine

Mensagem por moisesBR Qua 03 Abr 2013, 14:17

então por que não colocar uma "trava" antes de chegar a isso?
tipo:
Código:
if vaue => 9999999999999999999 then {vaue = 9999999999999999999}//19 caracteres\
(não me pergunte como)
moisesBR
moisesBR

Data de inscrição : 24/10/2009
Reputação : 15
Número de Mensagens : 885
Prêmios : Ajuda a reduzir o peso de processamento de engine Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1


http://inprovise.blogspot.com/

Ir para o topo Ir para baixo

Ajuda a reduzir o peso de processamento de engine Empty Re: Ajuda a reduzir o peso de processamento de engine

Mensagem por PedroX Qua 03 Abr 2013, 14:23

Um jeito fácil de testar é colocar no Room Creation Code:
Código:
var a, i;
a=1;
repeat(20)
{
a*=10;
i=string(a);
show_message(i+':'+string(string_length(i)-1));
}

Veja que quando passa de 18 zeros dá erro.

Você terá que usar um método que comprima o número.

Primeiramente, terá que usar get_string() pois este aceitará números maiores que 10^18.

Vamos pegar o número 1234567008900012340000000 como base.

Exemplo:

Código:
a = get_string("Enter 'x' value", "");
l = string_length(a);
if (l<20)
{
part1=real(a);
part2=0;
}
else
{
// 12345670089000120000000 / 2 =  6172835044500060000000
part1 = real(string_copy(a, 1, 10))/2; // 1234567008 /2 = 617283504
part2 = real(string_copy(a, 11, l-10))/2; // 9000120000000 /2 = 4500060000000
}
part1=string(part1);
if (part2==0) part2=string_repeat('0', l-10);

resultado = part1+part2;

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : Ajuda a reduzir o peso de processamento de engine Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

Ajuda a reduzir o peso de processamento de engine Empty Re: Ajuda a reduzir o peso de processamento de engine

Mensagem por bootzin Qui 04 Abr 2013, 22:01

então por que não colocar uma "trava" antes de chegar a isso?
tipo:
CÓDIGO:
if vaue => 9999999999999999999 then {vaue = 9999999999999999999}//19 caracteres\

(não me pergunte como)
Eu não queria limitar a 19 caracteres.. Eu queria fazer com que não travasse com mais de 19 caracteres Razz (Até porque, o código multiplica um número ímpar por 3, então mesmo que o número não tenha 19 caracteres, o código pode travar..)

PedroX, eu tentei fazer como você falou, mas por algum motivo não estou conseguindo usar o "get_string" pra pegar um valor e dividí-lo por dois.. Fala que o número de argumentos é errado.. Por isso eu troquei pro get_integer.. Mas aí ele limita a 19 caracteres.. Então.... O que eu faço?

----------------EDIT------------------

Mudei o código no CREATE para:
Código:
astr = get_string("Enter 'x' value", "");
a = real(string_digits(astr))
l = string_length(a);
if (l<20)
{
part1=real(a);
part2=0;
}
else
{
// 12345670089000120000000 / 2 =  6172835044500060000000
part1 = real(string_copy(a, 1, 10))/2; // 1234567008 /2 = 617283504
part2 = real(string_copy(a, 11, l-10))/2; // 9000120000000 /2 = 4500060000000
}
part1=string(part1);
if (part2==0) part2=string_repeat('0', l-10);

resultado = part1+part2;
textx = object0.x
texty = object0.y
Mudei o "a = get_string()" pra "astr = get_string("Enter 'x' value", ""); a = real(string_digits(astr))"
Com isso eu converti o get_string em um número real, o único problema é que fazendo isso eu continuo limitando os cálculos que o programa pode fazer.. Vocês tem alguma ideia do que eu poderia fazer?
Ou o valor máximo de caracteres pra uma variável é 19 mesmo e não dá pra mudar?
bootzin
bootzin

Data de inscrição : 28/01/2010
Reputação : 5
Número de Mensagens : 136
Prêmios : Ajuda a reduzir o peso de processamento de engine Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Ajuda a reduzir o peso de processamento de engine Empty Re: Ajuda a reduzir o peso de processamento de engine

Mensagem por PedroX Qui 04 Abr 2013, 23:10

Adiciona um script com o código:
Código:
var a, b, c;
a=argument1;
b=argument2;

if (argument0==0)
{
c = string_length(a);
if (c<20)
{
part1=real(a);
part2=0;
}
else
{
part1 = real(string_copy(a, 1, 10))/b;
part2 = real(string_copy(a, 11, c-10))/b;
}
part1=string(part1);
if (part2==0) part2=string_repeat('0', c-10);

resultado = part1+part2;
}
else
if (argument0==1)
{

}

Para fazer uma conta que divide por 2:

Código:
script(0, get_string('',''), 2)

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : Ajuda a reduzir o peso de processamento de engine Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

Ajuda a reduzir o peso de processamento de engine Empty Re: Ajuda a reduzir o peso de processamento de engine

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos