[Resolvido]Essas 2 problemas é pra quem é bom...

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

Resolvido [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por Convidad em Qui 19 Maio 2011, 11:33

E ai galera!!!!!!!!!!!

Então, ando com 2 problemas que andam me encomodando bastate no meu jogo de cartas:

1° Problema>

Código:
if n < 6
{instance_create(140+(90*n),240,ds_list_find_value(deck,random(ds_list_size(deck))))
 instance_create(140+(90*n),240,brilho)
 n+=1}

Quero quando ele criar a carta e tirar da ds_list, mas não consigo fazer isso acontecer

2° Problema>

Código:
if clic = 1 && mouse_check_button_pressed(mb_left) && position_meeting(mouse_x,mouse_y,other)

{{global.bonus = addata
with(other)
{if noc = 0{exit}
if noc = 1{ataque += global.bonus  global.ata +=global.bonus}
break}}
with(self){instance_destroy()}}

Aki eu quero verificar se o obj "other" e uma carta senao, o ataque sera add em um outro obj qualquer que não e uma carta, dando erro no jogo


Ajude-me senão não conseguirei continuar meu jogo, qualquer coisa avisem se não entenderem a pergunta

FLW GALERA!!!!!!!!!!! Happy


Última edição por makerloko em Sex 20 Maio 2011, 13:54, editado 1 vez(es)

Convidad
Convidado


Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por saim em Qui 19 Maio 2011, 11:49

1º:
Código:
if n < 6
{pos=random(ds_list_size(deck))
instance_create(140+(90*n),240,ds_list_find_value(deck,pos))
ds_list_delete(deck, pos)
 instance_create(140+(90*n),240,brilho)
 n+=1}
, mas eu acho que seria mais fácil usar ds_list_shuffle(deck), no começo do jogo e tirar as cartas na ordem.

2º:
Código:
carta=instance_position(mouse_x, mouse_y, obj_carta)
if clic = 1 && mouse_check_button_pressed(mb_left) && carta>=0

{{global.bonus = addata
with(carta)
{if noc = 0{exit}
if noc = 1{ataque += global.bonus  global.ata +=global.bonus}
break}}
instance_destroy()}
não tem sentido usar with(self) pra destruir a instância. Só se usa o with pra se referir a outras instâncias.
Edit: relendo o código, notei que a instância será destruída de qualquer forma, mesmo se o "if" retornar falso. Está assim no código original, só mantive a lógica como estava. Cabe a você decidir se é isso mesmo o que você quer.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por Convidad em Qui 19 Maio 2011, 13:00

@saim

Obrigado por responder!!!



eu nao sei oque ta acontencendo mas o "deck" e esse

Código:
ds_list_add(deck,a)
ds_list_add(deck,w)
ds_list_add(deck,h)
ds_list_add(deck,e)
ds_list_add(deck,e)
ds_list_add(deck,e)

entao era pra criar 1 carta "a", 1 carta "w", 1 carta "h" e 3 1 cartas "e" ne???
mas ta criando 1 ou 2 cartas "a" a mais



É que no jogo vai ter varias cartas entao so o "obj_carta" n vai adiantar, tinha que ser tipo o jogo verifica se o obj e uma carta e ai addiciona o ATK

Obrigado mais uma vez

Convidad
Convidado


Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por saim em Qui 19 Maio 2011, 13:30

makerloko escreveu:


eu nao sei oque ta acontencendo mas o "deck" e esse

Código:
ds_list_add(deck,a)
ds_list_add(deck,w)
ds_list_add(deck,h)
ds_list_add(deck,e)
ds_list_add(deck,e)
ds_list_add(deck,e)

entao era pra criar 1 carta "a", 1 carta "w", 1 carta "h" e 3 1 cartas "e" ne???
mas ta criando 1 ou 2 cartas "a" a mais
só 3 cartas "e", mas sim, só uma carta "a". Talvez você esteja criando mais cartas "a" em algum outro evento ou não esteja deletando a carta correta. Seu deck tem sempre 6 cartas?

makerloko escreveu:

É que no jogo vai ter varias cartas entao so o "obj_carta" n vai adiantar, tinha que ser tipo o jogo verifica se o obj e uma carta e ai addiciona o ATK
obj_carta_parent?

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por Convidad em Qui 19 Maio 2011, 14:50



nao tem outro obj adicionando cartas, acho que é nao ta sendo deletado direito



nao entendi obj_carta_parent, ele e pra funcionar nos parents do obj_carta? se ser isso acho que n vai funcionar pq eu n uso as cartas com parents

Convidad
Convidado


Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por PedroX em Qui 19 Maio 2011, 15:26

Vamos por partes.

Primeiro problema:
if n < 6
{instance_create(140+(90*n),240,ds_list_find_value(deck,random(ds_list_size(deck))))
instance_create(140+(90*n),240,brilho)
n+=1}

Possivel motivo do problema:
Você não esta usando um laço. Não importa se você está somando '1' para a variavel. Ele só faz uma vez e sai.

Resolução do problema:
n=0;
while (n < 6)
{
instance_create(140+(90*n),240,ds_list_find_value(deck,irandom(ds_list_size(deck)-1))
instance_create(140+(90*n),240,brilho)
n+=1
}

Se resolver posta aqui.
O segundo problema eu tento resolver depois.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por Convidad em Qui 19 Maio 2011, 15:33

@Pedro Henrique

Obrigado por reponder!!!

É que na verdade o problema e que quero que a carta criada seja excluida da ds_list, e com a soluçao proposto pelo saim acho que nao ta sendo excluida

Convidad
Convidado


Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por saim em Qui 19 Maio 2011, 15:34


Talvez outro evento dentro do mesmo objeto? Fiz um teste aqui, faça o mesmo pra ver:
>create<
Código:
a=10
w=20
h=30
e=5 //eu sei que no seu caso são objetos, mas é só pra entender
deck=ds_list_create()
ds_list_add(deck,a)
ds_list_add(deck,w)
ds_list_add(deck,h)
ds_list_add(deck,e)
ds_list_add(deck,e)
ds_list_add(deck,e)
>step<
Código:
if keyboard_check_pressed(vk_enter){
   pos=floor(random(ds_list_size(deck)))
   ds_list_delete(deck, pos)
   }
>draw<
Código:
for (i=0; i<ds_list_size(deck); i+=1)
   draw_text(x+20*i, y, string(ds_list_find_value(deck, i)))
Viu como os objetos valores são deletados corretamente? Significa que usar "pos=floor(random(ds_list_size(deck)))" funciona. Mostre seu código atual.

EDIT: Ah, vi o erro! eu não tinha falado pra usar o floor, no random! É importante, use floor.


Não dá pra criar um objeto só pra ser o parent? Você cria ele e define ele como parent em todas as cartas. Senão o teste, pra ver se tem alguma carta na posição do mouse seria imenso:
Código:
if instance_position(mouse_x, mouse_y, obj_carta_1) or instance_position(mouse_x, mouse_y, obj_carta_2) or instance_position(mouse_x, mouse_y, obj_carta_3) or...

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por Convidad em Qui 19 Maio 2011, 16:24

@saim



acho que resolvi oque tava dando errado, eu tava criando mais cartas do que tinha no "deck", mas porque criava a carta "a" (primeira carta) se não era pra ter nenhuma no "deck"? nao era pra dar algum erro de vez criar a carta "a"?



eu queria saber se tem tipo alguma funçao que busque no obj se existe uma variavel com um valor, tipo:

if existir ("existir" seria a funçao que quero saber se existe)
tipo = carta{
instance_destroy()}

senao como se usa a funçao com o parent???

obrigado novamente!

Convidad
Convidado


Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por saim em Qui 19 Maio 2011, 16:59

1º - Talvez você queira dizer que estava criando mais cartas do que DEVERIA ter no deck. Mas eu acho que o problema era aquilo que eu falei no edit: eu me enganei e não te pedi pra definir a posição usando floor. random(número) te retorna um valor qualquer, dificilmente um inteiro. Daí, na hora de criar uma instância, o game maker parece arredondar o valor, mas na hora de deletar, só deleta se você der a ele um valor inteiro - e nós estávamos dando um decimal.
Edit: Não, parece que ele arredonda pra deletar, também... A principal diferença é que ele parece arredondar pro inteiro mais próximo, o que permitiria um arredondamento pra fora da list, de modo que o valor deletado não está na list. Só que isso não explica porque estavam sendo criadas varias cartas "a". Como você resolveu?

2º instance_position(x, y, obj) te retorna a id da instância do objeto "obj" na posição (x,y) ou -4 (noone) se não houver alguma instância naquela posição. Por isso te sugeri usar ela. Daí, como você tem diversos objetos diferentes pra serem cartas, não dá pra fazer tudo de uma vez só, a menos que exista um objeto que seja parent de todas as cartas. Você procura pelo parent e a função te retornará a id da instância de qualquer "child", ou seja, qualquer objeto que tenha o objeto "parent" como... bom, como parent.
O parent não precisa ter nenhum sprite, nenhum, código, nenhum nada. Basta criar o objeto, dar um nome a ele e, isso sim dá trabalho, ir em uma-por-uma das cartas e definir esse objeto como parent.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por Convidad em Qui 19 Maio 2011, 19:00

@saim

Desculpe minha noobise mas eu nao consegui entender a soluçao para o 2° problema e como se usa o parent pra resolver isso

obrigado pela paciencia!

Convidad
Convidado


Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por PedroX em Qui 19 Maio 2011, 19:09

Está meio complicado de entender o que você quer.
Talvez postando a engine, poderemos resolver.
Ou então, poste os códigos usados.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por Convidad em Qui 19 Maio 2011, 21:16

@saim

resolvi assim:

Código:
if n < 6
{pos=floor(random(ds_list_size(deck)))
instance_create(140+(90*n),240,ds_list_find_value(deck,pos))
ds_list_delete(deck,pos)
instance_create(140+(90*n),240,brilho)
n+=1
}

e tendo as 6 cartas pra ser criadas, ai nao cria cartas "a" a mais Smile

@Pedro Henrique

eu quero quando que clicar na carta ela adicione o ataque, mas tem varias cartas e obj e nao sei como fazer isso to usando esse codigo aki mas ele adiciona somente para carta "a":

Código:
if clic = 1 && mouse_check_button_pressed(mb_left) && position_meeting(mouse_x,mouse_y,a)

{{global.bonus = addata
with(a)
{if noc = 0{exit}
if noc = 1{ataque += global.bonus  global.ata +=global.bonus}
break
}}with(self){instance_destroy()}}

obrigado saim e Pedro Henrique

Convidad
Convidado


Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por saim em Qui 19 Maio 2011, 22:52

1º: É, era isso o que eu tinha pensado mesmo. Estranho, não deveria ter acontecido aquele erro. Bom, está resolvido, então tudo bem. Me avise se acontecer qualquer coisa.
Ah, como o Pedro Henrique disse, esse código tira apenas uma carta a cada evento (se for o evento step, isso será bem rápido, mas não instantâneo). É isso mesmo que você quer, certo?

2º: Pra entender a solução, você precisa entender o que são parents. Parents são objetos que... Deixa eu traduzir, "parents" significa "pais". Os objetos "pais" são tipo o tronco de uma árvore e os filhos, os galhos. As instâncias seriam... as folhas! Um galho pode ter seus movimentos diferentes dos da árvore, mas se a árvore muda de casa, o galho vai junto.
Calma, eu chego no seu problema, só mais um pouco de metáfora.
Bom, pra saber se uma folha é de bananeira ou de rosa, o game maker te permite olhar o tronco, por exemplo. Claro, você pode olhar se a folha pertence a um-por-um dos galhos, mas olhar se ela pertence ao tronco é mais rápido. Pelo menos em programação. Na vida real, o mais fácil é olhar o tamanho da folha, portanto chega de metáfora.
Bom, o que você quer é saber se:
- sob o mouse existe a instância de algum objeto
- havendo, quer saber se essa instância é uma carta.
Se todas as cartas (galhos) tiverem um pai (tronco), basta verificar se a instância (folha) pertence ao objeto parent. Se elas não tiverem um tronco, se forem galhos soltos, você tem que verificar se a instância pertence a cada um dos objetos. A folha pertence ao galho "carta de ataque"? A folha pertence ao galho "carta de defesa"? A folha pertence ao galho "carta de..." etc.
Ok, agora chega de metáfora MESMO.
Então você tem diversos objetos-que-são-cartas, certo? Faça um objeto e chame ele de obj_carta_parent. Vá em cada um dos objetos-que-são-cartas e defina o parent deles como obj_carta_parent. Agora, se eu perguntar às instâncias de cada um dos objetos-que-são-cartas se elas são instâncias do obj_carta_parent, elas responderão que sim. É mais simples que definir uma variável em cada um deles, certo?
Agora, voltando à função instance_position. Como eu disse, ela retorna a id de uma instância. position_meeting te retorna apenas se a instância está ali, o que não é o que você quer, você quer saber QUEM está ali. Porque? Porque a partir daí, você pode fazer o que quiser com a carta em questão. Você coloca "carta_escolhida=instance_position(mouse_x, mouse_y, obj_carta_parent)" e "carta_escolhida" passa a armazenar a INSTÂNCIA sob o mouse. Quando você escrever "with(carta_escolhida)", o código a seguir acontecerá naquela instância, seja ela qual for (desde que haja alguma instância ali, claro).

Caramba, falei muito! Espero que tenha explicado mais do que complicado.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por Convidad em Sex 20 Maio 2011, 13:53

@saim



eu quero que aconteça isso mesmo, é como eu queria Smile



agora sim conseguir resolver!!! botei o obj_parent nas cartas e no evento pra adicionar o ataque eu funfo direitinho!

Vlw mesmo saim e Pedro Henrique por me ajudarem, pode trancar o topico

Convidad
Convidado


Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por Grotle em Sab 21 Maio 2011, 17:14

Topico resolvido.
Trancado.
Se o autor quiser reabrir o tópico envie MP para algum administrador ou moderador.

Flws!

Grotle

Ranking : Nota B
Número de Mensagens : 559
Idade : 21
Data de inscrição : 28/02/2010
Notas recebidas : B-B
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://gsogaming.blogspot.com/

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Essas 2 problemas é pra quem é bom...

Mensagem por Conteúdo patrocinado Hoje à(s) 01:53


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