Entrar
Últimos assuntos
» Preciso de ajudapor AftonDuGrau Dom 21 Abr 2024, 20:18
» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30
» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Qui 18 Abr 2024, 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
[Dúvida] Herança de objetos
5 participantes
Página 1 de 1
[Dúvida] Herança de objetos
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.
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.
Re: [Dúvida] Herança de objetos
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????
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- Data de inscrição : 24/05/2008
Reputação : 14
Número de Mensagens : 2417
Prêmios :
x 0 x 0 x 0
x 0 x 2 x 0
x 0 x 0 x 0
Re: [Dúvida] Herança de objetos
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:
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.
- 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.
Re: [Dúvida] Herança de objetos
na verdade ateh piorou
xDDDD
nao intendi ainda cara! XD
que merda eh essa de familia?!?! filho mae... pai???
xDDDD
nao intendi ainda cara! XD
que merda eh essa de familia?!?! filho mae... pai???
Janx- Data de inscrição : 24/05/2008
Reputação : 14
Número de Mensagens : 2417
Prêmios :
x 0 x 0 x 0
x 0 x 2 x 0
x 0 x 0 x 0
Re: [Dúvida] Herança de objetos
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:
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!
É 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!
Re: [Dúvida] Herança de objetos
a.... nao intendi mas fis uma engine com 2 personagens!
http://www.zshare.net/download/50463801e64be4b9/
deve ser isso... =D
http://www.zshare.net/download/50463801e64be4b9/
deve ser isso... =D
Janx- Data de inscrição : 24/05/2008
Reputação : 14
Número de Mensagens : 2417
Prêmios :
x 0 x 0 x 0
x 0 x 2 x 0
x 0 x 0 x 0
Re: [Dúvida] Herança de objetos
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.
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.
Re: [Dúvida] Herança de objetos
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
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
Re: [Dúvida] Herança de objetos
Bem, nos meus games quando eu quero "herdar" as variáveis do Objeto pai eu faço isso:
Evento CREATE do objPai:
Evento CREATE do Objeto FILHO:
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.
Re: [Dúvida] Herança de objetos
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:Talvez isso funcione pra você também.
- Código:
event_inherited(); //Este comando vem PRIMEIRO
.
.
.
//meu codigo de inicializacao do objeto FILHO vai a seguir.
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?
Re: [Dúvida] Herança de objetos
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.
Re: [Dúvida] Herança de objetos
É! 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:
É necessário que eu chame o event_inherited()? No caso, chamaria só para garantir não é?
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 é?
Re: [Dúvida] Herança de objetos
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ê.
Re: [Dúvida] Herança de objetos
Acho que isso explica bem.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ê.
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
Re: [Dúvida] Herança de objetos
Pois é! Mesmo com uma orientação a objetos pobre, ajuda bastante quando se quer criar objetos que precisem dos mesmos tipos de variáveis.
Re: [Dúvida] Herança de objetos
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.
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.
Re: [Dúvida] Herança de objetos
É! 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:
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.
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.
Re: [Dúvida] Herança de objetos
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):
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. ^^
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
}
}
}
}
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. ^^
Tópicos semelhantes
» [Duvida] Objetos no GM
» Duvida COM OBJETOS!
» Duvida com criaçao de objetos.
» [duvida]OBJETOS
» Duvida com criar objetos...
» Duvida COM OBJETOS!
» Duvida com criaçao de objetos.
» [duvida]OBJETOS
» Duvida com criar objetos...
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|