Conectar-se
Quem está conectado
22 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 22 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Ranking : Nota E
Notas recebidas : E
Data de inscrição : 11/12/2012
Número de Mensagens : 84
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

Gerar objetos com distância entre cada

em Sex 07 Jul 2017, 19:43
Hey! Eu estou com um problema.
Eu criei um script chamado dropXp(), em que quando eu fosse utiliza-lo, eu colocaria o quanto de xp que eu gostaria que dropasse no lugar do argumento0 e assim gerariam n objetos de Xp. Até aí tudo bem, mas eu gostaria que eles ficassem separados um dos outros e no script coloquei assim:
Código:

repeat(argument0) {
if place_free(x,y) {
instance_create(x,y,oXp)
}
else instance_create(x+random(182),y + random(155),oXp)
}
E in-game, quando o script é chamado, as XPs aparecem todas no mesmo lugar. O que fazer?
Ranking : Sem avaliações
Data de inscrição : 06/07/2017
Número de Mensagens : 24
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 6
Ver perfil do usuário

Re: Gerar objetos com distância entre cada

em Sex 07 Jul 2017, 22:35
Em algum evento anterior ao gameplay (um create na tela título, por exemplo), adicione o comando randomize().

Referência do comando no site da YoYo:
This function sets the seed to a random value. Should you need to keep a consistent value over a number of runs of a game, you should be using random_set_seed(). Please note, that when using the random number functions in GameMaker: Studio the initial seed is always the same, as this makes tracing errors and debugging far easier. Should you wish to test with true random, you should call this function at the start of your game.


Example:
randomize();
The above code will randomize the seed.

Por padrão o GMS trava a semente geratriz pra facilitar o debug, por isso seu random no X e Y acaba não reciclando as posições.
avatar
Data de inscrição : 29/05/2008
Número de Mensagens : 422
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 16

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://felipejoys.webnode.com

Re: Gerar objetos com distância entre cada

em Ter 22 Ago 2017, 22:41
É que place_free só retornará true se bater com objetos marcados como sólidos. E retornará true para qualquer objeto sólido, não apenas para oXp. Imagino que não seja o caso do seu objeto de XP. Sugiro mudar todo o código que você mostrou, desdo repeat, para algo assim:

Código:

// argument0 = número de objetos de XP a serem criados

// valores editáveis
randomx = 182 // largura da área de drop, a partir desse objeto - sugiro por como argument1 (randomx = argument1)
randomy = 155 // altura da área de drop, a partir desse objeto - sugiro colocar como argument2
tentativasMax = 200 // número de vezes para tentar antes de desistir. talvez argument3

// valores fixos - não alterar
xpDropada = 0 // quantas P já foram dropadas
tentativas = 0 // quantas tentativas já foram feitas no drop atual

repeat(argument0) {
    tentativas = 0
    while (xpDropada < argument0) { // enquanto não dropar todas as XP
        tentarx = x+irandom(randomx) // mudar o local
        tentary = y+irandom(randomy) // mudar o local

        if (oXp.x == x+tentarx && oXp.y == tentary) { // se já existir qualquer oXp neste lugar
            tentativas += 1 // contar a tentativa e tentar novamente
        }
        else { // Achamos um lugar vazio! (Mas pode acabar parcialmente em cima de outro oXp ao lado)
            instance_create(tentarx,tentary,oXp)
            xpDropada += 1
        }
    }
}

Lembrando que o randomize() é importante mesmo.
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum