Obrigado por visitar a The Game Makers Brasil Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais. |
Duvida sobre Game Maker
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Duvida sobre Game Maker
Bom dia,
Sou novo aqui no fórum e no game maker mas já tenho algumas duvidas sobre o game maker.
1- Estou tentando fazer um jogo de rpg em tempo real sei fazer ele mostrar o numero do dano em um inimigo, mas quando e mais de um eu não sei. pq ele mostra o mesmo dano nos dois inimigos.
Como to fazendo:
Crio um novo objeto que pega todos os inimigos na room e se o inimigo esta com a Target true ele recebe o dano.
Obs: O hp de cada inimigo esta funcionado certinho.
Olha o script:
if Target = "Target"{
instance_create(self.x,self.y,obj_damage);
e no objeto dano:
damage = global.playerAttack - global.playerTarget.enenyDefend;
crio um objeto temporário para saber qual e o inimigo, mas quando e mais de um inimigo ai ele mostra o mesmo dano.Sei que a logica esta errada.
2- A segunda duvida como faço para equipar um item ou arma no player usando um objeto slot?(quando pego o item e coloco no slot do item(que e um objeto) ele equipa e quando tiro ele desequipa).
Obs: estou usando o sistema de drag and drop nos itens e nao to usando ds.
E ai alguém sabe me ajuda com essa duvida.
Desde já agradeço.
Sou novo aqui no fórum e no game maker mas já tenho algumas duvidas sobre o game maker.
1- Estou tentando fazer um jogo de rpg em tempo real sei fazer ele mostrar o numero do dano em um inimigo, mas quando e mais de um eu não sei. pq ele mostra o mesmo dano nos dois inimigos.
Como to fazendo:
Crio um novo objeto que pega todos os inimigos na room e se o inimigo esta com a Target true ele recebe o dano.
Obs: O hp de cada inimigo esta funcionado certinho.
Olha o script:
if Target = "Target"{
instance_create(self.x,self.y,obj_damage);
e no objeto dano:
damage = global.playerAttack - global.playerTarget.enenyDefend;
crio um objeto temporário para saber qual e o inimigo, mas quando e mais de um inimigo ai ele mostra o mesmo dano.Sei que a logica esta errada.
2- A segunda duvida como faço para equipar um item ou arma no player usando um objeto slot?(quando pego o item e coloco no slot do item(que e um objeto) ele equipa e quando tiro ele desequipa).
Obs: estou usando o sistema de drag and drop nos itens e nao to usando ds.
E ai alguém sabe me ajuda com essa duvida.
Desde já agradeço.
- theguitarmester
- Membro
- Reações: 0
- Mensagens: 23
-
- Contato:
Re: Duvida sobre Game Maker
Bem vindo @Ghots
Não entendi muito bem, isso fica no objeto dano?
damage = global.playerAttack - global.playerTarget.enenyDefend;
Tinha escrito mais coisas, mas achei que tava complicado, vou deixar resumido.
utilizando o evento colisão do dano, tu pode fazer a redução de dano utilizando o other:
damage = global.playerAttack - other.enenyDefend;
Mas fiquei em dúvida do que realmente queria fazer, usei como base que tu queria que ao player tocar o poder, esse dano irá ver quem está sofrendo o dano, e calculará o dano adequado para aquele inimigo.
2 - cria variavel para cada slot, ou, um vetor:
slot1=0; slot2=0 ;slot3=0;..
ou, que é melhor:
slot[];
daí pode colocar coisas como:
if slot[1] == "inSeto Kaiba" habilidadeDeRoubar = 100;
if slot[2] == "Coração das Cartas" habilidadeDeRoubar = 10000;
....melhor seria colocar um switch ao invés de if, no exemplo.
Não entendi muito bem, isso fica no objeto dano?
damage = global.playerAttack - global.playerTarget.enenyDefend;
Tinha escrito mais coisas, mas achei que tava complicado, vou deixar resumido.
utilizando o evento colisão do dano, tu pode fazer a redução de dano utilizando o other:
damage = global.playerAttack - other.enenyDefend;
Mas fiquei em dúvida do que realmente queria fazer, usei como base que tu queria que ao player tocar o poder, esse dano irá ver quem está sofrendo o dano, e calculará o dano adequado para aquele inimigo.
2 - cria variavel para cada slot, ou, um vetor:
slot1=0; slot2=0 ;slot3=0;..
ou, que é melhor:
slot[];
daí pode colocar coisas como:
if slot[1] == "inSeto Kaiba" habilidadeDeRoubar = 100;
if slot[2] == "Coração das Cartas" habilidadeDeRoubar = 10000;
....melhor seria colocar um switch ao invés de if, no exemplo.
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: Duvida sobre Game Maker
Blz cara,
theguitarmester
Olha quando target true o inimigo recebe o dano.
Então tenho um exemplo na room tenho 3 mostro, certo, quando eu ataco um inimigo e criado um objeto dano para mostra o dano do inimigo,(no objeto dano esta assim:
damage = global.playerAttack - global.playerTarget.enenyDefend;)
Se eu atacar em área,(que tenha mais de um inimigo) este numero q sobe em cima do inimigo e igual ao primeiro inimigo que foi atacado, entendeu? (este sistema de dano e igual do jogos tipo terraria, FINAL FANTASY ou qualquer rpg que mostra o dano no inimigo). A duvida e pq ele nao mostra o dano de cada inimigo sendo q cada um tem uma defesa diferente?
Cara, tentei usar o damage = global.playerAttack - other.enenyDefend, mas o game maker fala quenão reconhece avariável other.enenyDefend.
2 - Eu já fiz o sistema drag and drop no item, só quero fazer ele equipa, assim quando coloco o item(objeto) no slot item(outro objeto) ele equipa.
theguitarmester
Olha quando target true o inimigo recebe o dano.
Então tenho um exemplo na room tenho 3 mostro, certo, quando eu ataco um inimigo e criado um objeto dano para mostra o dano do inimigo,(no objeto dano esta assim:
damage = global.playerAttack - global.playerTarget.enenyDefend;)
Se eu atacar em área,(que tenha mais de um inimigo) este numero q sobe em cima do inimigo e igual ao primeiro inimigo que foi atacado, entendeu? (este sistema de dano e igual do jogos tipo terraria, FINAL FANTASY ou qualquer rpg que mostra o dano no inimigo). A duvida e pq ele nao mostra o dano de cada inimigo sendo q cada um tem uma defesa diferente?
Cara, tentei usar o damage = global.playerAttack - other.enenyDefend, mas o game maker fala quenão reconhece avariável other.enenyDefend.
2 - Eu já fiz o sistema drag and drop no item, só quero fazer ele equipa, assim quando coloco o item(objeto) no slot item(outro objeto) ele equipa.
- theguitarmester
- Membro
- Reações: 0
- Mensagens: 23
-
- Contato:
Re: Duvida sobre Game Maker
Agora entendi o que ser esse dano hehe, ele para mostrar na tela o dano que foi causado, apenas um draw.
É uma questão de lógica mesmo, crie o dano vinculado a cada inimigo.
Se a criação do dano parte do inimigo, grave a ID do inimigo no dano, para ele saber qual é a instância /inimigo que esse dano está se referenciando, algo como
Inimigo:
//Ao tomar o dano, ele cria o obj que mostra o dano:
Então em algum lugar do dano:
damage = global.playerAttack - idDoInimigoQueEuEstouMostrandoODano.enenyDefend;
Cuidado só ao colocar no create neste meu exemplo, porque o idDoInimigoQueEuEstouMostrandoODano inicia como zero, o create é(pelo menos até o GMS1, pelo que lembro) executado logo após a intância ser criada, logo, a linha abaixo no inimigo que seta o ID, acontece depois do create do objdano.
Mas eu acho que o melhor modo não era criar o dano dessa forma, porém essa funciona, enfim, é isso.
É uma questão de lógica mesmo, crie o dano vinculado a cada inimigo.
Se a criação do dano parte do inimigo, grave a ID do inimigo no dano, para ele saber qual é a instância /inimigo que esse dano está se referenciando, algo como
Inimigo:
//Ao tomar o dano, ele cria o obj que mostra o dano:
Código: Selecionar todos
var objdano = instance_create(x,y-32, obj_dano);
objdano.idDoInimigoQueEuEstouMostrandoODano = instance_id; //Não lembro se de fato é instance_id a função pra pegar o id da instancia atual, this deve dar também.
damage = global.playerAttack - idDoInimigoQueEuEstouMostrandoODano.enenyDefend;
Cuidado só ao colocar no create neste meu exemplo, porque o idDoInimigoQueEuEstouMostrandoODano inicia como zero, o create é(pelo menos até o GMS1, pelo que lembro) executado logo após a intância ser criada, logo, a linha abaixo no inimigo que seta o ID, acontece depois do create do objdano.
Mas eu acho que o melhor modo não era criar o dano dessa forma, porém essa funciona, enfim, é isso.
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: Duvida sobre Game Maker
Blz theguitarmester
Então o problema e que quando e em área eu pego somente o id do inimigo selecionado,o q estou tentando fazer e ataca todos inimigo que tiver a target true.Pode ser dois,três ou quatro sei la todos q tiver a target true.(o sistema de target do inimigo funciona). Como faço se ele atacar dois(ou mais inimigo)?
Obrigado pela ajuda, isso de pega o id do inimigo ja tinha feito, aqui: global.playerTarget.????, esta em uma variável global.
Então o problema e que quando e em área eu pego somente o id do inimigo selecionado,o q estou tentando fazer e ataca todos inimigo que tiver a target true.Pode ser dois,três ou quatro sei la todos q tiver a target true.(o sistema de target do inimigo funciona). Como faço se ele atacar dois(ou mais inimigo)?
Obrigado pela ajuda, isso de pega o id do inimigo ja tinha feito, aqui: global.playerTarget.????, esta em uma variável global.
- theguitarmester
- Membro
- Reações: 0
- Mensagens: 23
-
- Contato:
Re: Duvida sobre Game Maker
Dê uma olhada no comando "with" e em como ele funciona
"Então o problema e que quando e em área eu pego somente o id do inimigo selecionado"
Como tu tá fazendo essa captura?
tu pode criar algo assim:
Tu tá usando uma variável só, tu só vai "conseguir" guardar um inimigo.
Caso não entendeste, mostra os códigos que tu está usando para marcar os inimigos, e para fazer danos neles.
"Então o problema e que quando e em área eu pego somente o id do inimigo selecionado"
Como tu tá fazendo essa captura?
tu pode criar algo assim:
Código: Selecionar todos
InimigosNaMira[0];
totalNaMira=0;
with inimigos {if target=true {other.inimigosNaMira[totalNaMira]=id; other.totalNaMira+=1;}}
Caso não entendeste, mostra os códigos que tu está usando para marcar os inimigos, e para fazer danos neles.
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: Duvida sobre Game Maker
Blz theguitarmester
Vou deixar o código para vc então, pq isso de guardar mais de um inimigo eu entendi, mas o q tenho q mudar no objeto dano não tenho ideia.
Abaixo o código que estou usando:
Colisão com inimigo:
Objeto dano:
Obrigado por sua ajuda.
Vou deixar o código para vc então, pq isso de guardar mais de um inimigo eu entendi, mas o q tenho q mudar no objeto dano não tenho ideia.
Abaixo o código que estou usando:
Colisão com inimigo:
Código: Selecionar todos
if enemyTarget = "Target"{
instance_create(self.x,self.y,obj_player_damage);
}
Código: Selecionar todos
Create:
damage = global.playerAttack - global.playerTarget.enenyDefend;
- theguitarmester
- Membro
- Reações: 0
- Mensagens: 23
-
- Contato:
Re: Duvida sobre Game Maker
GhostPower:O que poderia você fazer:
Colisão com inimigo:
Objeto dano:
Essa é uma forma de fazer, tive que colocar o alarm(que foi só para não fazer a definição do damage no create) porque quando tu cria uma nova instância, o evento CREATE dela é chamado imediatamente, e então, o valor de enenyDefend estaria como 0.
De nada!
Colisão com inimigo:
Código: Selecionar todos
if enemyTarget = "Target"{
var dano = instance_create(self.x,self.y,obj_player_damage);
dano.enenyDefend = enenyDefend;
}
Código: Selecionar todos
Create:
enenyDefend = 0;
alarm[9] = 1;
damage=0;
Alarm 0:
damage = global.playerAttack - enenyDefend;
Essa é uma forma de fazer, tive que colocar o alarm(que foi só para não fazer a definição do damage no create) porque quando tu cria uma nova instância, o evento CREATE dela é chamado imediatamente, e então, o valor de enenyDefend estaria como 0.
De nada!
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: Duvida sobre Game Maker
Bom dia theguitarmester,
Cara testei as modificações q tu disse, mas continua na mesma.
Não sei o pq, pensei q ia funciona agora.
Obs.: Não sei se falei, mas os inimigos são herança. Não tem um jeito de fazer isso usando o Draw de cada inimigo ?
Vlw pela tentativa.
Cara testei as modificações q tu disse, mas continua na mesma.
Não sei o pq, pensei q ia funciona agora.
Obs.: Não sei se falei, mas os inimigos são herança. Não tem um jeito de fazer isso usando o Draw de cada inimigo ?
Vlw pela tentativa.
Re: Duvida sobre Game Maker
Pensei um pouco aqui e pensei o seguinte:
A função que mostra o dano ser no inimigo já que você cria a global de dano do jogador pode acessar ela dentro dos códigos do inimigo, basicamente da seguinte forma: Quando o inimigo estiver na área do ataque do jogador ele mostra o dano a partir do inimigo
Em relação ao equipamento pode criar um objeto de cada item do jogo com atributos padrão, por exemplo ATAQUE e DEFESA.
Quando o jogador arrastar o item até o slot você acessa o item que foi equipado pelo id e coloca ele dentro da lista de slots.
Depois quando for calcular a defesa do jogador soma a defesa de cada item que está equipado nos slots acessando o atributo de defesa de cada item pelo id.
Espero ter ajudado!
A função que mostra o dano ser no inimigo já que você cria a global de dano do jogador pode acessar ela dentro dos códigos do inimigo, basicamente da seguinte forma: Quando o inimigo estiver na área do ataque do jogador ele mostra o dano a partir do inimigo
Em relação ao equipamento pode criar um objeto de cada item do jogo com atributos padrão, por exemplo ATAQUE e DEFESA.
Quando o jogador arrastar o item até o slot você acessa o item que foi equipado pelo id e coloca ele dentro da lista de slots.
Depois quando for calcular a defesa do jogador soma a defesa de cada item que está equipado nos slots acessando o atributo de defesa de cada item pelo id.
Espero ter ajudado!
Linguagens que já programei / programo:
C#, HTML, PHP, MySQL, Python e C.
Minhas paixões:
Programação, Pixel Art, Música, Design em geral.
C#, HTML, PHP, MySQL, Python e C.
Minhas paixões:
Programação, Pixel Art, Música, Design em geral.
Re: Duvida sobre Game Maker
Vou tentar ajudar com o primeiro problema, depois pensamos no segundo o/
Sinceramente, tentar montar seu código sem ter acesso a ele seria muito difícil, então me dei ao luxo de criar um do 0 e te passar pra você se basear nele, caso queira.
Aqui está o link pra baixar o projeto.
Exemplo do "sistema":
Basicamente, quando o jogador(quadrado verde) ataca, caso tenha um inimigo na frente dele ele marca esse inimigo como um alvo(sei que não é exatamente o que você quer, mas foi um exemplo pra você adaptar).
Ao marcar esse inimigo como um alvo, o oManager vai criar o objeto de dano(quadrado azul) em cima dele.
Todos os monstros dentro do objeto de dano vão ser atingidos por ele.
Você pode mudar a ordem que as coisas acontecem pra ter resultados diferentes. Por exemplo criar o objeto de dano ao atacar e caso ele acerte alguém você marca esse alguém como alvo(e ai você tira vida ou alguma outra coisa).
Algo que eu queria deixar comentado aqui é esse trecho do oManager:
[/left]
Essa é a parte importante pra você poder separar quem esta sendo alvo e quem não está.
Na verdade essa é a parte mais importante pra você lidar com os inimigos, hehe...
Enfim, espero que o código te ajude o/
See ya.
Sinceramente, tentar montar seu código sem ter acesso a ele seria muito difícil, então me dei ao luxo de criar um do 0 e te passar pra você se basear nele, caso queira.
Aqui está o link pra baixar o projeto.
Exemplo do "sistema":
Basicamente, quando o jogador(quadrado verde) ataca, caso tenha um inimigo na frente dele ele marca esse inimigo como um alvo(sei que não é exatamente o que você quer, mas foi um exemplo pra você adaptar).
Ao marcar esse inimigo como um alvo, o oManager vai criar o objeto de dano(quadrado azul) em cima dele.
Todos os monstros dentro do objeto de dano vão ser atingidos por ele.
Você pode mudar a ordem que as coisas acontecem pra ter resultados diferentes. Por exemplo criar o objeto de dano ao atacar e caso ele acerte alguém você marca esse alguém como alvo(e ai você tira vida ou alguma outra coisa).
Algo que eu queria deixar comentado aqui é esse trecho do oManager:
Código: Selecionar todos
// Checar se existe algum inimigo
if(instance_exists(oRed)) {
// Cria array com todos inimigos
i = 0; repeat(instance_number(oRed)) {
Enemy[i] = instance_find(oRed, i);
i++
}
// Pega cada inimigo no mapa pra poder manipular
i = 0; repeat(array_length_1d(Enemy)) {
with(Enemy[i]) {
// Checa se ele é alvo e está vivo
if(Target && isAlive) {
// Cria objeto de dano em cima dele
instance_create(x, y, oDamage);
}
}
i++
}
}
Essa é a parte importante pra você poder separar quem esta sendo alvo e quem não está.
Na verdade essa é a parte mais importante pra você lidar com os inimigos, hehe...
Enfim, espero que o código te ajude o/
See ya.
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: Duvida sobre Game Maker
Blz SnowPi
Vamos la cara:
Primeiramente obrigado pela sua ajuda a segunda duvida eu consegui fazer uma maneira de equipar e desequipar um item pelo objeto(ate agora esta funcionando).
Então o meu maior problema esta no objeto dano, pq não sei o que fazer para criar um objeto dano e ele calcular os danos em diferentes inimigos de uma só vez.
Se vc poder usar uma teoria ou um código no objeto dano e mostrar, eu agradeceria.
Obs.: O HP do inimigo funciona (mesmo em área, ele calcular o dano de cada inimigo mesmo com a defesa ou atributo diferente), até sugeri em usar o events Draw para mostra o dano, pq ai eu eliminaria este objeto dano.
Deixo meu muito obrigado pela sua atenção e disposição.
Vamos la cara:
Primeiramente obrigado pela sua ajuda a segunda duvida eu consegui fazer uma maneira de equipar e desequipar um item pelo objeto(ate agora esta funcionando).
Então o meu maior problema esta no objeto dano, pq não sei o que fazer para criar um objeto dano e ele calcular os danos em diferentes inimigos de uma só vez.
Se vc poder usar uma teoria ou um código no objeto dano e mostrar, eu agradeceria.
Obs.: O HP do inimigo funciona (mesmo em área, ele calcular o dano de cada inimigo mesmo com a defesa ou atributo diferente), até sugeri em usar o events Draw para mostra o dano, pq ai eu eliminaria este objeto dano.
Deixo meu muito obrigado pela sua atenção e disposição.
Re: Duvida sobre Game Maker
O calculo do dano depende do teu sistema de batalha. Não tenho como simular um aqui porque a forma como você fez pode divergir muito da forma como eu faria...
Anyway, você pode, por exemplo, usar o código que eu deixei na minha última resposta DENTRO do objeto dano pra pegar todos os inimigos acertados(só precisaria mudar algumas coisas no código), depois disso você calcularia os danos e absorções...
Anyway, você pode, por exemplo, usar o código que eu deixei na minha última resposta DENTRO do objeto dano pra pegar todos os inimigos acertados(só precisaria mudar algumas coisas no código), depois disso você calcularia os danos e absorções...
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: Duvida sobre Game Maker
Blz SnowPi,
Então vc poderia mostra o seu jeito de fazer? Ou sua ideia?
Obrigado pela ajuda, cara infelizmente não tenho ideia de como fazer isso.
Então vc poderia mostra o seu jeito de fazer? Ou sua ideia?
Obrigado pela ajuda, cara infelizmente não tenho ideia de como fazer isso.
Re: Duvida sobre Game Maker
Eu tinha escrito uma resposta legal aqui mas o fórum me deslogou e eu perdi tudo e infelizmente não tenho mais tempo pra refazer ela, mas eu deixei esse código aqui, basicamente:
Exemplo de aplicação:
Caso o objeto dano fosse criado colidindo com 2 inimigos:
Goblin:
HP = 20
Defesa = 5
Ogro:
HP = 20
Defesa = 20
Se o dano for 25, o Goblin vai morrer(25 do ataque - 5 da defesa = 20 de dano) e o Ogro vai sobreviver(25 do ataque - 20 da defesa = 5 de dano).
Agora, pra não ter que colocar todo o calculo ali(talvez seu jogo tenha buffs e estados específicos, chance de acertar ou de dar crítico e etc...) eu criaria um script pra cuidar de tudo isso.
Código: Selecionar todos
// Checar se existe algum inimigo
if(instance_exists(oRed)) {
// Cria array com todos inimigos
i = 0; repeat(instance_number(oRed)) {
Enemy[i] = instance_find(oRed, i);
i++
}
// Pega cada inimigo no mapa pra poder manipular
i = 0; repeat(array_length_1d(Enemy)) {
with(Enemy[i]) {
if(place_meeting(x, y, oDano)) {
// Tá colidindo com o dano
Enemy[i].hp -= (oDano.dano - Enemy[i].defesa)
}
}
i++
}
}
Caso o objeto dano fosse criado colidindo com 2 inimigos:
Goblin:
HP = 20
Defesa = 5
Ogro:
HP = 20
Defesa = 20
Se o dano for 25, o Goblin vai morrer(25 do ataque - 5 da defesa = 20 de dano) e o Ogro vai sobreviver(25 do ataque - 20 da defesa = 5 de dano).
Agora, pra não ter que colocar todo o calculo ali(talvez seu jogo tenha buffs e estados específicos, chance de acertar ou de dar crítico e etc...) eu criaria um script pra cuidar de tudo isso.
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: Duvida sobre Game Maker
Vlw SnowPi
Vou tentar usar este código no meu jogo, mas digo se tiver mais algumas ideia sobre isso estou a disposição.
Obrigado pela ajuda.
Vou tentar usar este código no meu jogo, mas digo se tiver mais algumas ideia sobre isso estou a disposição.
Obrigado pela ajuda.
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: Duvida sobre Game Maker
Bom dia SirPug,
Então cara obrigado pela sua ajuda, mais já consegui resolver as duas duvidas.
Se quiserem podem ate fechar/encerrar esta duvida com resolvida.
Agradeço a todos pela a ajuda.
Então cara obrigado pela sua ajuda, mais já consegui resolver as duas duvidas.
Se quiserem podem ate fechar/encerrar esta duvida com resolvida.
Agradeço a todos pela a ajuda.
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes