Entrar
Últimos assuntos
» Como ajustar velocidade de cada frame da animação no game makerpor 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
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:
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos