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
» player não consegue andar
por lovn7 Qui 21 Nov 2024, 13:33

» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22

» Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31

» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23

» Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49

» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58

» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36

» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36

» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33

» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51

» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28

» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18

» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08

» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10

» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16

» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40

» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01

» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45

» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34

» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28

» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48

» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54

» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14

» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50


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

- Tópicos semelhantes

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