O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Mover evento para coordenada 'X' / 'Y'

Iniciado por Bussoli, 19/10/2019 às 17:50

Olá!
Gostaria de saber como faz pra mover um evento para coordenada ( X , Y )
No caso seria um sistema de Matérias do Final Fantasy 7 que estou querendo fazer, sendo que se uma Matéria já estiver na coordenada X , Y; a outra não poderá ser equipada na mesma coordenada.

Ou se tiver um jeito mais fácil de fazer isso eu ficaria muito agradecido!
Desde já agradeço pela atenção!  :XD:

Equipe: Game Fantasy RPG

Vendo essa sua imagem, ainda não entendi o que seria a matéria. Seria o "Fire", "Bolt", etc?
Tu poderia criar uma variávelDaMatéria pra dizer se a matéria já foi equipada ou não.
Ex: se tiver uma matéria equipada, essa variávelDaMatéria = 1, dai no evento tu coloca: if variavelDaMateria == 1 -> proibir de equipar outra matéria e assim por diante com as outras.
Darles LSF

Citação de: DarlesLSF online 19/10/2019 às 19:12
Vendo essa sua imagem, ainda não entendi o que seria a matéria. Seria o "Fire", "Bolt", etc?
Tu poderia criar uma variávelDaMatéria pra dizer se a matéria já foi equipada ou não.
Ex: se tiver uma matéria equipada, essa variávelDaMatéria = 1, dai no evento tu coloca: if variavelDaMateria == 1 -> proibir de equipar outra matéria e assim por diante com as outras.

As Matérias são essas esferas verdes a serem equipadas em 1 dos 16 Slots.
Equipe: Game Fantasy RPG

como vc está fazendo? é com eventos do mapa?, achei que era tudo por imagens apenas  :sera:

Bom você pode switches uma para cada slot, isso não funciona? se estiver ocupado você valida pela switch. Tem um modo mais hard com uma variável só, mas ai você me confirma pra eu entender aonde está travando.

20/10/2019 às 10:15 #4 Última edição: 20/10/2019 às 12:52 por Dr.XGB
Citação de: GF-Studio online 19/10/2019 às 17:50
Olá!
Gostaria de saber como faz pra mover um evento para coordenada ( X , Y )
Acredito que o recurso utilizado para os materiais sejam as "Pictures". Neste caso, no próprio comando "Show Picture...", tem a opção para definir por variáveis. Sabendo-se disso, você precisa declarar as posições de cada slot para que a matéria possa se mover para o slot correto.
Há 2 formas de fazer isso:
A primeira é via hard code, que é onde você vai usar o "Show Picture..." com valores estáticos, mas esses mesmo valores estáticos vão mudar de acordo com o slot selecionado através de If's.
A outra forma é a dinâmica, onde o próprio programa vai calcular a posição correta para enviar o material àquele slot. Tem um cálculo muito simples para esse tipo de situação, ainda mais que no seu sistema os slots estão em forma de grade. Você vai declarar apenas 2 variáveis, que serão usadas para as coordenadas X e a outra para a Y. Aí sim o "Show Picture..." será com valores dinâmicos, sem If's e sem valores estáticos, pois será chamado com as variáveis que você declarou. Para calcular a posição X, usa-se esta fórmula:
X = slotId % tamanhoDeColunas

Vale lembrar que % é operador Mod, que é utilizado para encontrar o resto da divisão de números inteiros. O tamanho de colunas, no seu caso, será 8, pois tem 8 slots em cima e 8 em baixo, dando o total de 16 slots.
E para encontrar a posição Y:
Y = slotId / tamanhoDeColunas

Sim, a gente usa o tamanho de colunas mesmo, e não a quantidade de linhas, só que dessa vez a gente faz uma divisão de números inteiros.
Vamos levar em consideração que os slots deverão ocupar, pelo que eu to vendo na imagem (estou medindo no olhômetro), 16x16 pixels, ok? Então devemos multiplicar o resultado desse cálculo por 16 para ele ir para o próximo slot na interface.
É claro que, olhando aqui na imagem que você disponibilizou, terá um offset entre um slot e outro, mas não vamos nos preocupar com isso agora, senão vai acabar ficando confuso. Faça de conta que os slots estão lado a lado sem nenhum espaçamento. Depois ajustaremos essa parte.

Em eventos ficaria algo do tipo:
// Receber o valor do slot
<> Variável: [0001: slotId]  Set 1

// Posição X
<> Variável: [0002: slotX] Set V[0001]
<> Variável: [0002: slotX] Mod 8
<> Variável: [0002: slotX] * 16

// Posição Y
<> Variável: [0003: slotY] Set V[0001]
<> Variável: [0003: slotY] / 8
<> Variável: [0003: slotY] * 16

// Mover Picture para coordenada ocupada pelo slot
<> Show Picture: 1, <nomeDaImagem>, (v[0002], v[0003])

No caso da Id da Picture, como não tem como selecionar uma Id dinamicamente via eventos, nesse caso você não terá escapatória: vai ter que criar If's para cada Id do Slot associando a uma determinada Id de picture. Coloquei uma linha de comando com a Id 1 só mesmo para representar.

Esse é o básico sobre grades. Isso eu não estou considerando a posição inicial dos slots e nem os intervalos, mas isso pode ser ajustado facilmente.

Citação de: GF-Studio online 19/10/2019 às 17:50
No caso seria um sistema de Matérias do Final Fantasy 7 que estou querendo fazer, sendo que se uma Matéria já estiver na coordenada X , Y; a outra não poderá ser equipada na mesma coordenada.

Agora sobre a tratativa de matérias no mesmo slot, terá que ser uma outra lógica. Recomendo que separe os slots em variáveis, onde você pode armazenar a Id da matéria em cada um dos slots, sendo 0 como vazio.
Daí é só você verificar na condição ao inserir o material, se o slot selecionado estiver com valor 0, ele insere normalmente, senão não realiza a inclusão da matéria naquele slot, pois estará ocupado por uma outra matéria.




Espero, de alguma forma, ter ajudado.
Qualquer coisa estou à disposição!  :ok: