Página 1 de 1

[80%] Substituindo todos os sprites ao mesmo tempo!

Enviado: Seg Fev 06, 2017 3:32 am
por AdrianoPpaula
Fala ae galera blz! Então, no meu projeto tem um sprite determinado que sempre quando algo acontece na room, exatamente todos os sprite do jogo devem ser substituído por esse sprite! no caso eu uso o comando sprite_replace mas o chato é que tenho que fazer isso para todos os sprites que existe no jogo, ai fica mais ou menos assim:

Código: Selecionar todos

sprite_replace(sprite_1,spr_global,0,0,0,0,0);
sprite_replace(sprite_2,spr_global,0,0,0,0,0);
sprite_replace(sprite_3,spr_global,0,0,0,0,0);
sprite_replace(sprite_4,spr_global,0,0,0,0,0);
sprite_replace(sprite_5,spr_global,0,0,0,0,0);
sprite_replace(sprite_6,spr_global,0,0,0,0,0);
sprite_replace(sprite_7,spr_global,0,0,0,0,0);
sprite_replace(sprite_8,spr_global,0,0,0,0,0);
sprite_replace(sprite_9,spr_global,0,0,0,0,0);
sprite_replace(sprite_10,spr_global,0,0,0,0,0);
sprite_replace(sprite_11,spr_global,0,0,0,0,0);
sprite_replace(sprite_12,spr_global,0,0,0,0,0);
sprite_replace(sprite_13,spr_global,0,0,0,0,0);

...........
Atualmente existe 130 sprites diferente no projeto, ai vou ter que fazer isso 130 vezes U_u

Como posso fazer esse comando para todos os sprites do projeto de forma que não seja absurdamente grande dessa maneira que estou fazendo >.<

Re: [10%] Substituindo todos os sprites ao mesmo tempo!

Enviado: Seg Fev 06, 2017 7:34 am
por marquinhossm
Bom dia Adriano.

Não sei se entendi bem sua dúvida, mas se for o que penso, você poderia fazer um laço (for) e creio que dessa forma o seu problema estaria resolvido.

Observe o código abaixo:

for (i = 1; i <= 130; i++) {
    sprite_replace(sprite_i, spr_global, 0, 0, 0, 0, 0);


Dessa forma a variável i será substiuiída pelo valor da iteração do laço.

Acho que dessa forma deve resolver o seu problema.

Espero poder ter ajudado.

Abraço!

Re: [10%] Substituindo todos os sprites ao mesmo tempo!

Enviado: Seg Fev 06, 2017 9:38 am
por 7f55842f
o.O

Primeiro, o sprite_replace não funciona assim, ele é usado para substituir uma sprite (atualmente alocada no jogo), por uma outra, a ser localizada em um diretório no computador, a menos que "sprite_global" seja uma variável, contendo o endereço dessa imagem, mas mesmo assim, fazendo dessa forma, todas as sprites do jogo seriam alteradas PERMANENTEMENTE (a menos claro, que tu use outro sprite_replace para cada imagem alterada), fazendo um belo trampo de programador-macaco...

GM Help - sprite_replace

Segundo, o for, também não funciona assim, o GM não sabe o que é i++ (ou pelo menos até a versão que eu uso, que não é a mais recente) e ele não saberia identificar o i de "sprite_i", daria um erro de "variável não declarada", de qualquer forma, é a maneira errada de substituir as sprites de todos os objetos.

GM Help - The "For" Statement

Para substituir isso de maneira mais efetiva, basta alterar a sprite_index de todos os objetos... Assim ó:

with all {
sprite_index = sprite_global;
}

Só.

Edit: Lembrando que "sprite_global" deve ser uma sprite já inserida no GM, ok.

Re: [10%] Substituindo todos os sprites ao mesmo tempo!

Enviado: Seg Fev 06, 2017 12:43 pm
por AdrianoPpaula
O sprite_global é um sprite que está dentro do GM e os outros não.
Então é mais ou menos isso, eu quero alterar TODOS os sprites permanentemente!
no caso usando o comando sprite_replace só que em vez de selecionar 1 só eu selecionaria todos os sprites do jogo.
seria possível fazer isso?? o_O 

Re: [10%] Substituindo todos os sprites ao mesmo tempo!

Enviado: Seg Fev 06, 2017 8:51 pm
por Dust
Bem, nao sei como substituir permanente todas as sprites... mas ao invés de você ter que fazer isso para todos os 130 objetos, experimente usar a função chamada "Parent", os objetos que tiverem um objeto parent definido, eles irão imitar algumas funções dele... pode ser que funcione experimente fazer isso, ao inves de mandar a função para cada objeto mandar apenas para esse objeto pai em que todos iriam imitar, mas creio que esse objeto pai teria que estar na mesma room, se não o comando da erro.
Vai poupar muito tempo...

Re: [10%] Substituindo todos os sprites ao mesmo tempo!

Enviado: Qua Fev 08, 2017 8:11 pm
por Zalliant
Boa noite,
Ha uma maneira simples de resolver isto, basta colocar uma variavel em cada objeto que vai ou nao mudar de imagem. Ficando assim:
No Create de cada objeto que a imagem ira mudar, caso o contrario basta colocar esta variavel como false:

Código: Selecionar todos

//Variavel exemplo:
replace=true
No step de algum objeto, por exemplo um "objControle":

Código: Selecionar todos

if keyboard_check(vk_space) { 
with (all) { if replace==true { sprite_index=spr_global }}
};
E esta pronto, uma forma simples e eficaz de mudar uma sprite ou outras diversas coisas!
Espero ter ajudado, alias fiz uma engine caso necessite, segue o link abaixo:
https://www.dropbox.com/s/rc8bbmpg5mbw8hm/engine_replace.gmk?dl=0
Atenciosamente,
Wendryos G.

Re: [10%] Substituindo todos os sprites ao mesmo tempo!

Enviado: Dom Fev 12, 2017 11:24 am
por AdrianoPpaula
Funciona perfeitamente mas o problema é que serve somente para os objetos que estão na room e não para todos do projeto. Então esse sistema seria para a manutenção de sprites carregado na memoria. Está funcionando perfeitamente só queria deixar ele melhor de se trabalhar. Então vou explicar melhor:

Todos os sprites do jogo são carregados externamente então a cada tela de load eu faço da seguinte maneira

- Criei um sprite bem pequeno que chamei ele de spr_null (um sprite que contem 1x1 e seu consumo de memoria dele é praticamente 0) seria como se fosse um sprite vazio,
a cada tela de load, TODOS os sprites do jogo são substituíveis por esse fazendo com o o consumo de memoria fique quase no zero. ( Ai que ta o problema pois atualmente criei um scripit contendo as tais 130 linhas que citei no começo do post e para cada sprite novo que coloco no projeto tenho que adicionar uma linha nesse script).

- Depois que todos os sprites do jogo é o spr_null. Começo a carregar os sprite que preciso para aquele momento ou aquela determinada fase por exemplo, usando o sprite_replace. Lembrando que os sprites estão no projeto mais eu apaguei todas as imagens criando somente o nome, ele pega o sprite que está dentro do projeto e substitui pelo a imagem que está fora.

sprite_replace(sp_hero_ataque_1,"/sp_hero_ataque_1_strip8.png",8,0,0,105,204);

*sp_hero_ataque_1 - sprite vazio que está dentro do jogo.
*sp_hero_ataque_1_strip8.png - é uma image strip contendo 8 frames que está no diretório do jogo

Funciona perfeitamente =D
porem só ta pegando esse script ai...por isso querei uma maneira dele usar o sprite_replace mais para todos os sprites do jogo sem ter que criar um comando para cada sprite existente >.<