variável global que não funciona com todos os objetos??

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

variável global que não funciona com todos os objetos??

Mensagem por Dialga111 em Qua 31 Mar 2010, 20:14

Estou tendo uns probleminhas com uns códigos, alguém me helpa?

o que eu to tentando faze é isso: o personagem começa deitado, daí vem umas falas e tal e quando chega em uma parte da conversa ele levanta.

Tá, consegui fazer ele ficar deitado, conversar, levantar, tudo ok. MENOS fazer ele levantar na hora certa...

pra conversa eu usei arrays 1D, que acho mais fácil pra programar, e um código que faz com que a string aumente quando apertar o Z. Quando a string chega em um certo ponto, muda a fala, vai pra outro array. Até aí consigo direito.

Eu pensei o sequinte: se eu fizer com que o código do array da fala que eu quero seja global, o personagem vai perceber quando este código chegar no número certo e vai levantar na hora certa, certo?

Foi o que eu pensei, e foi o que eu fiz. coloquei o global. na frente da variável do array em todos os lugares que ela aparecia no objeto do texto. No objeto do personagem, no evento step coloquei que se a variavel global do array fosse maior que 1, ele ia levantar (o codigo e as sprites pra levantar ja estam ok e funcionando) só que quando eu testo o jogo, ele diz que a variável do array é desconhecida, mas ela tá com o global. na frente em todos os lugares! Me ajudem, plz! não sei o que eu faço!!

Dialga111

Número de Mensagens : 33
Data de inscrição : 13/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: variável global que não funciona com todos os objetos??

Mensagem por fonetico em Qua 31 Mar 2010, 22:16

Que eu saiba, para fazer uma variável global, deve-se colocar o global. atrás não? Ou com arrays é diferente?

fonetico

Número de Mensagens : 1830
Idade : 21
Data de inscrição : 05/10/2009
Reputação : 7
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: variável global que não funciona com todos os objetos??

Mensagem por Dialga111 em Qua 31 Mar 2010, 22:18

eh, foi o que eu pensei, mas não deu certo =/ tentei tudo que eu pude imaginar, mas parece que meu personagem gosta de levanta cedo xD

Dialga111

Número de Mensagens : 33
Data de inscrição : 13/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: variável global que não funciona com todos os objetos??

Mensagem por vinians em Qua 31 Mar 2010, 22:26

Amigo, isso ja aconteceu comigo, pois tambem uso muitas arrays. Você pode resolver isso fazendo o seguinte.
Crie um objeto e marque ele como persistente. Coloque o nome dele com algo que tenha a ver com aramazenamento, por exemplo objGeral. Depois no evento Create dele cria sua array normalmente. Depois sempre que voce quizer acessar a array em outros objetos, basta acrescentar objGeral.array[] na frente.
Pra ficar melhor ainda voce pode criar uma room só de configuração, pois o GM as vezes executa os eventos numa ordem sinistra. Por exemplo crie uma pequena room por exemplo 100 x 100 e coloque o objGeral nela. E no proprio evento CREATE do objGeral coloque room_goto_next(). Isso faz com que o codigo de declaracao seja executado ANTES de tudo e evita mutos problemas.

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: variável global que não funciona com todos os objetos??

Mensagem por Dialga111 em Qua 31 Mar 2010, 22:35

hm... isso vai facilitar muito a minha vida xD vlw! Bom, isso me ajuda a simplificar as arrays, mas ainda não resolveu oo problema.

Chamei o objGeral de object_fala2, o array chamei de grey2 (o nome do personagem). Coloquei no evento step do personagem:

if object_fala2.grey2[1]=1
levantando=1 //a variável que eu usei

maaas ele diz que não reconhece a variável grey2 <.<

Dialga111

Número de Mensagens : 33
Data de inscrição : 13/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: variável global que não funciona com todos os objetos??

Mensagem por vinians em Qua 31 Mar 2010, 22:40

Entendi, mais voce tem que fazer o seguinte. Coloque esse codigo no CREATE do seu objeto object_fala2.
Código:

var i;
for (i = 0; i < 50; i += 1)
  gray2[i] := 0; //valor inicial pode ser string tambem
Isso força a criacao das variaveis do array. Deve ajudar.

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: variável global que não funciona com todos os objetos??

Mensagem por Convidad em Qua 31 Mar 2010, 22:58

Esse problema é mais comum no Game Maker 6/6.1... também não sei explicar o motivo, pois aparentemente não há nenhum erro. Eu acredito que a melhor saída seja a sugestão do vinians para uma room separada, encarregada da inicialização das globais.

Tente conferir se você não está comparando o conteúdo da variável ao invés do índice. Pode ser esse o problema.

Uma outra saída seria executar o jogo no modo debug (F6), ignorar o erro e tentar prosseguir normalmente. Se a mensagem de erro não for mais mostrada, pode ser que o objeto esteja sendo criado antes da declaração da variável.

Na janela de configurações, você pode pedir ao Game Maker que gere um arquivo de log de erros. Logo, você pode copiar o que está nele e postar pra gente.

Boa sorte!

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: variável global que não funciona com todos os objetos??

Mensagem por Dialga111 em Qua 31 Mar 2010, 23:01

pois eh, parece que eu sei menos sobre arrays do que eu pensava x.x eu so mesmo mto noob

vlw pela ajuda cara, eu entendi o que vc quer dizer, e tecnicamente sei usar. Vou dar mais uma estudade em arrays antes de continuar tentando, vou tentar por em prática essa ideia do objeto geral persistente também. Pelo que eu entendi isso vai deixar muito mais fácil, pq eu tava criando um objeto pra cada conversa, o que daria MUITO trabalho, acho que sua sugestão vai me ajudar muitooo, vlw!

mais uma coisa, eu mais ou menos sei como trabalhar com arrays e tal, consigo fazer as falas, com os nomes e até mugshots. Até aí eu consigo fazer de boa, mas eu não sei controlar pras falas aparecerem na hora certa, pra cada coisa acontece a seu tempo. Se eu seguir seu conselho de usar um objeto persistente, isso significa que o objeto geral vai estar em todas as rooms, mas eu não sei como "ativar" as falas na hora certa.

Desculpa se eu pareço confuso ou até chato, eu to procurando as palavras pra tenta explica o que eu não sei, mas se eu não sei o que eu não sei fica complicado neh xD

Dialga111

Número de Mensagens : 33
Data de inscrição : 13/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: variável global que não funciona com todos os objetos??

Mensagem por vinians em Qua 31 Mar 2010, 23:09

Amigo, isso não tem problema nenhum, alias o forum é pra isso aprender e ensinar! Pode perguntar a vontade, tenho certeza que voce tambem vai ajudar muita gente aqui!
Quanto a sua dúvida sobre o momento de ativar as falas existe muitos métodos, tem a ver mais com a estrutura do seu jogo e como voce que que seja ativado.
Pode ser por exemplo usando alarmes, pode usar time lines, pode usar uma variavel que vai contando. Tenta do seu jeito e se não conseguir agente tenta te ajudar!
flw!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: variável global que não funciona com todos os objetos??

Mensagem por Dialga111 em Qua 31 Mar 2010, 23:22

Happy' eu fico meio sem graça de pergunta um monte de coisa e enche a paciência de vcs... num gosto de incomoda x.x

Mas já que o fórum é pra isso mesmo, me ajuda numa outra coisa?? Laughing

Eu já tentei fazer isso por timelines, alarmes, variáveis... mas nao consigo aprenser sozinho (aliás, tentei as 3 coisas hj, fui descobrindo como que funcionava e testando xD) mas enfim, não importa o que eu faça não consigo fazer isso de cada coisa acontecer a um tempo.

Vou dar um exemplo do que eu queria fazer:


-o personagem começa deitado
-começa uma conversa
-em certo ponto da conversa o personagem levanta
-a conversa continua sem que o jogador possa mover o personagem enquanto ele fala
-depois que a conversa acaba o personagem anda sozinho até um lugar
-fala mais um pouco
-vc toma o controle do personagem

tecnicamente isso seria fácil se eu usasse timelines, eu consegui fazer com que o personagem deitasse, levantasse e andasse desse jeito. O problema entra na parte em que não tem como prever um tempo específico pras coisas acontecerem, porque o personagem só levanta ou só anda depois de certa fala, mas a conversa não pasa sozinha, você tem que apertar uma tecla pra conversa continua, que nem em jogos de pokémon ou megaman, que o texto vai aparecendo letra por letra e quando chega no final do espaço vc aperta o a pra continua.

E é aí que eu não consigo mais fazer! se é tudo com o tempo acertado, direitinho eu consigo. se é só a conversa, eu tb consigo. Mas se eu tenho que colocar os dois juntos não vai!! x.x

mais uma vez agradeço a ajuda, a compreensão e a paciência de todo mundo xD

Dialga111

Número de Mensagens : 33
Data de inscrição : 13/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: variável global que não funciona com todos os objetos??

Mensagem por vinians em Qua 31 Mar 2010, 23:43

Ok amigão, isso se encaixa mais em uma FSM (Finite State Machine) ou Maquina de Estados Finitos. Como assim? É o seguinte:
Seu personagem começa no estado 0 (ZERO). A cada momento esse estado vai mudando e ele vai fazendo outra coisa. Quando termina de fazer tal coisa ele muda de estado e o ciclo se repete. Vamos implementar um exemplo:
No Evento Create do seu char coloque isso:

estado = 0; // Estado inicial deitado e mudo heheeheh
contador = 0; //Contador para mudanca de estado.

No evento STEP vamos interpretar a FSM.

switch(estado)
{
case 0:
{
contador += 1;
if (contador == 10)
{
sprite_index = sprite0;
show_message('e ai mano blz???');
estado := 1;
contador := 0;
}
break;
}
case 1:
{
contador += 1;
if (contador == 10)
{
show_message('Acho que vai chover...');
estado := 2;
contador := 0;
}
break;
}
case 2:
{
if (x < 400) x = x + 2 else estado = 3; ///aqui ele começa a andar
break;
}
case 3:
{
contador += 1;
if (contador == 20) //demora mais um pouco
{
show_message('Bom é isso ai vou vazar na maionese...');
estado := 4; //fim da maquina e o personagem volta ao normal
contador := 0;
}
break;
}
}

Como voce pode ver voce não precisa de vetores, da pra fazer tudo na Maquina, voce pode criar quantos estados voce quizer. Isso é muito bom pra animações, AI e dialogos.
flw!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: variável global que não funciona com todos os objetos??

Mensagem por Dialga111 em Qui 01 Abr 2010, 00:01

hmm tendi. vlw cara! não vou tentar isso agora pq é meio tarde e eu to com sono, não ia sair nada que preste xD Amanhã eu vou viajar, mas domingo eu to de volta e vejo como funciona isso! vlw pelas dicas cara! vlw mesmo!!

Dialga111

Número de Mensagens : 33
Data de inscrição : 13/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: variável global que não funciona com todos os objetos??

Mensagem por Conteúdo patrocinado Hoje à(s) 04:49


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum