[Dúvida] Herança de objetos

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

[Dúvida] Herança de objetos

Mensagem por Todi em Dom 26 Out 2008, 17:23

Olá pessoal,

Estou tentando fazer um menu de seleção de personagens, como em Street Fighter. Pois bem, o que estou fazendo é o seguinte: tenho um objeto mãe chamada "obj_ctrlSelChars" que controla a seleção dos personagens, indicando quantos já foram selecionados, evita que jogadores escolham o mesmo personagem e quando todos tiverem escolhido conduz o jogador a iniciar o jogo. Criado este objeto, criei os outros 8 objetos cada um referente a um personagem em específico, sendo que todos derivam do objeto mãe, ou seja, herdam seus métodos e atributos.

E é daí que vem o meu problema. Eu estou passando para o objeto mãe, através do evento "Mouse Enter" escrito em cada objeto, o nome do personagem e quando o mouse sai da área de foco do objeto é posto "N/A" para a variável. O problema é que isto funciona bem para 1 objeto, mas quando tento usar os 8 objetos de vez, apenas o último que é instanciado passa as informações para o objeto mãe, mesmo que eu passe o mouse sobre outros objetos para que seus nomes sejam mostrados, só o nome do último objeto é passado.

Então, o que eu gostaria de saber é como solucionar este problema. Só falta isso para que eu comece efetivamente a desenvolver a lógica do jogo!

Agradeço desde já.

Abraços!

EDIT: Segue abaixo uma screenshot da área de escolha dos personagens.


Todi

Número de Mensagens : 31
Idade : 31
Data de inscrição : 18/05/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.grupogrindsoft.co.cc

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por Janx em Dom 26 Out 2008, 18:13

cara nao intendi direito O.o
se quer assim:
o player poe o mouse em um objeto (os personagens neh) dai ele seta a variavel para o nome do objeto (por exemplo) é isso??
e o seu problema é que isso ta acontecendo apenas em um objeto, se vc passa o mouse nos outros nao acontece nada????

se for isso...
vc lembrou de programar em todos para se o mouse tiver em cima mandar a variavel lah????

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por Todi em Dom 26 Out 2008, 18:24

Vou melhorar meu exemplo. Tenho um objeto chamado "obj_selAttila" e outro chamado "obj_selConst", ambos referentes a um personagem distinto. No evento "Mouse Enter" eu tenho isso, em ambos objetos:

Código:
SelectedChar = string(CharName);

Essa variável "SelectedChar" é herdada do objeto mãe e é responsável em dizer qual personagem o jogador está dando foco com o mouse naquele momento. Então, se a ordem de criação dos objetos for "obj_selConst" e depois "obj_selAttila", sempre o nome do personagem "Attila" será mostrado, mesmo que o mouse esteja focando o personagem "Constantino".

Bom, por ser uma herança, estou partindo do pressuposto que não preciso utilizar no meu "Execute a peace of code" o modo "other", já que tudo é herdado para o objeto filho estou sempre utilizando o modo "self".

Acho que expliquei melhor agora. Se ainda tiver dúvidas é só falar que tento melhorar minha explicação.

Abraços.

Todi

Número de Mensagens : 31
Idade : 31
Data de inscrição : 18/05/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.grupogrindsoft.co.cc

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por Janx em Dom 26 Out 2008, 18:25

na verdade ateh piorou
xDDDD
nao intendi ainda cara! XD

que merda eh essa de familia?!?! filho mae... pai???

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por Todi em Dom 26 Out 2008, 18:32

AHAUHAUHAUHAUH! XD
É que eu sou programador C++ cara, tô pegando Game Maker tem pouco tempo, e como ele tem orientação a objetos, vc pode herdar as variáveis de um outro objeto quando vc clica naquele botão "Parent" e seta um outro objeto, é o mesmo que está fazendo uma herança, se vc sabe um pouco de Orientação a Objetos em C++ seria o mesmo que isso:

Código:
class obj_selAttila : public obj_ctrlSelChars
{
    //Códigos aqui
};

Bom, se vc não entendeu nada, ainda, poderia me dizer uma lógica para que eu possa fazer esse menu de seleção?

Obrigado!

Abraços!

Todi

Número de Mensagens : 31
Idade : 31
Data de inscrição : 18/05/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.grupogrindsoft.co.cc

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por Janx em Dom 26 Out 2008, 19:39

a.... nao intendi mas fis uma engine com 2 personagens!

http://www.zshare.net/download/50463801e64be4b9/

deve ser isso... =D

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por Kabeção em Dom 26 Out 2008, 20:47

Eu entendi (eu acho). ^^

Está confuso porque não usamos termos como herança em gml.
So preciso saber uma coisa, nos personagens esta definido como parent o obj mãe?

No caso as variaveis do parent não são herdadas pelos outro objetos. Você pode fazer um teste, defina uma variavel como str='ABC' no obj mãe e a defini como parent depois va nos objetos segundario e no evento draw chame uma funções para desenhar essa mesma variavel draw_text(10,10,str).
Dará erro, então as variaveis não são herdadas e tambem pelo fato de o obj mãe tecnicamente não existe, então como ele pode criar variaveis?

O que é herdado é o comportamento, ou seja, se no step x+=1, então todos os filho iram para a direita.
Não pode ser enviado valores para o obj mãe, tente como um obj normal mais que controla todos outros sem a opição de parents.
Assim o crie e envie e retira as variaveis com o objMae.nome_da_variavel.

Edit:
Percebi uma coisa também (eu acho). xD
Você cria o obj que serve como parent na room certo.
Nesse caso ele sera visto como individual sem nem um controle sobre seus "filhos".
Os parents não precisam ser criados para que os outros herdem seu comportamento.

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por Todi em Dom 26 Out 2008, 22:02

Na verdade, em alguns testes que eu fiz consegui a partir dos objetos filhos, modificar a variável que guarda a vez do próximo jogador escolher seu personagem, que se encontra no objeto mãe. E o mesmo acontecia do objeto mãe para os filhos, eles tinham acesso sem eu precisar dizer obj_mae.variavel. Como eu disse acima, eu estava estabelecendo essas mudanças através do método "self".

Mas eu fiz aqui este teste, e vi que realmente o comportamento dos filhos mudam de acordo com o que ocorre com o objeto mãe. Infelizmente, é um suporte a orientação a objetos muito pobre, espero que isso seja corrigido na próxima versão da engine.

Vou testar aqui o código que o janx falou e retorno um parecer.

Abraços.

EDIT: janx, muito obrigado pelo seu exemplo abriu meus olhos. Tá funcionando redondo, sem muita agonia de herança e bla bla bla. Tava querendo complicar, é o costume com o C++! XD

Todi

Número de Mensagens : 31
Idade : 31
Data de inscrição : 18/05/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.grupogrindsoft.co.cc

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por vinians em Dom 26 Out 2008, 23:16

Bem, nos meus games quando eu quero "herdar" as variáveis do Objeto pai eu faço isso:
Evento CREATE do objPai:
Código:

//Coloque valores Default
f_var1 = "default"; //pode ser qualquer valor
f_var2 = 0;
f_etc  = "stringx";

Evento CREATE do Objeto FILHO:
Código:

event_inherited(); //Este comando vem PRIMEIRO
.
.
.
//meu codigo de inicializacao do objeto FILHO vai a seguir.
Talvez isso funcione pra você também.

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: [Dúvida] Herança de objetos

Mensagem por Todi em Dom 26 Out 2008, 23:21

vinians escreveu:Bem, nos meus games quando eu quero "herdar" as variáveis do Objeto pai eu faço isso:
Evento CREATE do objPai:
Código:

//Coloque valores Default
f_var1 = "default"; //pode ser qualquer valor
f_var2 = 0;
f_etc  = "stringx";

Evento CREATE do Objeto FILHO:
Código:

event_inherited(); //Este comando vem PRIMEIRO
.
.
.
//meu codigo de inicializacao do objeto FILHO vai a seguir.
Talvez isso funcione pra você também.

Interessante.

Neste caso, o que vc está fazendo é trazendo os valores do evento CREATE do objeto pai para serem inicializados no objeto filho?

E caso fosse em um evento STEP por exemplo, eu faria o mesmo mas no evento STEP do filho?

Todi

Número de Mensagens : 31
Idade : 31
Data de inscrição : 18/05/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.grupogrindsoft.co.cc

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por vinians em Dom 26 Out 2008, 23:27

Exato, assim forço a execução do evento no objeto pai, na verdade isso acontece automaticamente desde que eu não sobreescreva o evento, mais geralmente usamos o evento CREATE no objeto filho, por isso da impressão que as variáveis "somem". Então sempre que usarmos o evento no objeto filho devemos chamar o evento herdado no objeto pai. Isso vale pra qualquer evento. Na verdade o GM não é orientado a objetos e sim a eventos, ele implementa apenas algumas funções, mais que ja ajudam muito sem complicar.

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: [Dúvida] Herança de objetos

Mensagem por Todi em Dom 26 Out 2008, 23:35

É! Lembra o velho VB 6, tudo eram eventos!

Como eu sou da velha guarda, gosto de declarar todas as variáveis primeiro pra depois ir utilizando-as, sejam elas locais (var) ou atributos do objeto (globalvar ou global.variavel), então, se eu, no evento CREATE do objeto pai crio as seguintes variáveis:

Código:
globalvar Var1;
globalvar Var2;
...

É necessário que eu chame o event_inherited()? No caso, chamaria só para garantir não é?

Todi

Número de Mensagens : 31
Idade : 31
Data de inscrição : 18/05/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.grupogrindsoft.co.cc

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por vinians em Seg 27 Out 2008, 03:05

Bom, se chamar vai garantir que sejam declaradas, mas so é necessário mesmo quando você usa o mesmo evento no obj filho, se não usar o GM chama pra você.

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: [Dúvida] Herança de objetos

Mensagem por Kabeção em Seg 27 Out 2008, 12:23

vinians escreveu:Bom, se chamar vai garantir que sejam declaradas, mas so é necessário mesmo quando você usa o mesmo evento no obj filho, se não usar o GM chama pra você.
Acho que isso explica bem. Razz

Eu estava usando o evento create em todos os objetos, realmente ele é subescrevido pelo o do filho.
Ainda não testei muito bem, mas os outros eventos funcionam da mesma forma, certo?

Se olhar a explicação dessa função no help, é exatamente isso.
event_inherited() Performs the inherited event. This only works if the instance has a parent object.
event_inherited() Realiza o evento herdado. Isto só funciona se a instancia tem um objeto pai.

Ainda não havia usado o parent para coisas assim, so para checar colisão entre objetos. xD

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por Todi em Seg 27 Out 2008, 12:45

Pois é! Mesmo com uma orientação a objetos pobre, ajuda bastante quando se quer criar objetos que precisem dos mesmos tipos de variáveis.

Todi

Número de Mensagens : 31
Idade : 31
Data de inscrição : 18/05/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.grupogrindsoft.co.cc

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por pedrosorio em Qua 29 Out 2008, 08:08

Você já deve saber isso mas sempre que você aplica qualquer função em que usa o nome da classe pai (objecto no game maker) ele tem em conta também as classes filhos (objectos).

Por exemplo, se "inimigo" for o parent e "goomba", "koopa" e "wario" forem os filhos:

with(inimigo) {
//código
}

vai executar o código para todos os objectos "inimigo" e para todos os filhos.

Isso funciona com colisões e com qualquer função em que use o nome de um objecto.

pedrosorio

Número de Mensagens : 50
Idade : 28
Data de inscrição : 15/06/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://pedrosorio.nfshost.com

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por Todi em Qua 29 Out 2008, 10:17

É! Isso eu já havia testado, se eu utilizo um comando com um parent, todos os seus filhos se comportam da mesma forma.

Agora uma coisa que eu fiz recentemente foi acessar um objeto sem ter que fazer uma referência "other" ou especificá-lo no "Execute a peace of code", foi o seguinte:

Código:
//Aqui eu faço uma associação ao objeto à ser utilizado

with(obj_ctrlSelChars)
{
    if(SelFinish)
    {
        room_goto(rm_mainGame);
    } 
}

Só explicando o código acima: o que eu faço é acessar a variável booleana "SelFinish", do objeto "obj_ctrlSelChars" e verifico se está setada como true, para que o jogador possa prosseguir para o jogo. Eu fiz isso sem ter que fazer nenhum tipo de referência nesse objeto que é um botão de nome "obj_btnOk1", e funcionou. Não sei se é uma boa prática de programação em GM, mas foi o único meio que consegui fazer com que ele acessasse a variável do outro objeto.

Eu me lembrei agora que tb poderia ter setado para executar o código em função do "obj_ctrlSelChars" e se eu quisesse mexer em alguma variável do "obj_btnOk1" usaria "self.variável".

Eu tenho alguns métodos ao programar e gosto de utilizar padrões de implementação de código, mais como organização pessoal mesmo, por isso gostaria de saber as melhores formas e métodos para acesso a outros objetos e seus atributos. Por isso gostaria de saber como vcs implementariam meu exemplo?

Abraços.

Todi

Número de Mensagens : 31
Idade : 31
Data de inscrição : 18/05/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.grupogrindsoft.co.cc

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por Kabeção em Qua 29 Out 2008, 11:42

Eu uso de qualquer forma dependendo da situação.
Agora que me lembrei... usar o parent como referencia tira apenas as variaveis do primeiro objeto filho criado.

Um menu como o seu onde so um deve ser escolido entre varias opições, pode ser feito de muitas maneiras sem precisar especificar claramente o objeto.
Como, usando um loop e procurando por todos os objetos na room (se a poucos objetos é claro):
Código:
var id_obj;

for (i=0;i<instance_count;i+=1)
{
    id_obj=instance_id[i]
    with(id_obj)
    {
        if variable_local_exists('selecionado')
        {
            if selecionado=true
            {
                other.nome_a_desenhar=nome_do_obj
            }
        }
    }
}
instance_count retorna a quantidade de objetos na room e instance_id retorna a id do objeto (que é unica para cada um) de acordo com o número atual que está na variavel i.
Se você colocar a variavel selecionado em cada objeto e quando o mouse passar sobre, coloque-a como true então você envia ao objeto que vai desenhar o nome do personagem selecionado.

Faço isso no objeto que vai desenhar os nomes.
Lembrando que dentro de um with, quando se usa other a execusão volta ao objeto atual.

Pode não ser exatamente o que quer mas da certo. ^^

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: [Dúvida] Herança de objetos

Mensagem por Conteúdo patrocinado Hoje à(s) 10:20


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