Entrar
Últimos assuntos
» player não consegue andarpor 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
Página 1 de 1
Ajuda a reduzir o peso de processamento de engine
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:
Agradeço desde já,
Bootzin
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:
Create- Código:
a = get_integer("Enter 'x' value:","")
textx = object0.x
texty = object0.y
- Código:
if a/2 = ceil(a/2) and a != 1
{
a = a/2
}
else
if a/2 != ceil(a/2) and a != 1 and keyboard_check_pressed(vk_enter)
{
a = (3*a)+1
draw_text_color(textx,texty,a,c_white,c_white,c_white,c_white,1)
textx = textx
texty = texty+16
}
- Código:
if texty >= room_height
{
texty = 0
textx = textx + room_width/3
}
if a = 1 and keyboard_check_pressed(vk_enter)
{room_restart()}
- Código:
draw_text_color(textx,texty,a,c_white,c_white,c_white,c_white,1)
Agradeço desde já,
Bootzin
bootzin- Data de inscrição : 28/01/2010
Reputação : 5
Número de Mensagens : 136
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Ajuda a reduzir o peso de processamento de engine
Variáveis tem limite de tamanho.
Se exceder esse limite naturalmente o programa trava.
Não há muito o que se fazer contra isso...
Se exceder esse limite naturalmente o programa trava.
Não há muito o que se fazer contra isso...
Re: Ajuda a reduzir o peso de processamento de engine
então por que não colocar uma "trava" antes de chegar a isso?
tipo:
tipo:
- Código:
if vaue => 9999999999999999999 then {vaue = 9999999999999999999}//19 caracteres\
Re: Ajuda a reduzir o peso de processamento de engine
Um jeito fácil de testar é colocar no Room Creation Code:
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:
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:
Re: Ajuda a reduzir o peso de processamento de engine
Eu não queria limitar a 19 caracteres.. Eu queria fazer com que não travasse com mais de 19 caracteres (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..)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)
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
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- Data de inscrição : 28/01/2010
Reputação : 5
Número de Mensagens : 136
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Ajuda a reduzir o peso de processamento de engine
Adiciona um script com o código:
Para fazer uma conta que divide por 2:
- 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:
Tópicos semelhantes
» [AJUDA] engine
» ajuda com engine
» Ajuda com engine
» ajuda engine
» (ajuda) presiso de engine top down
» ajuda com engine
» Ajuda com engine
» ajuda engine
» (ajuda) presiso de engine top down
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos