Partagez
Aller en bas
XGuarden
XGuarden
Membre

Nombre de messages : 38
Age : 35
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Taille d'une carte Empty Taille d'une carte

le Sam 18 Fév 2012 - 6:20
Je cherche à récupéré la taille d'une carte. Par exemple, Mettre dans une variable la longueur de X et de Y.
Ainsi, je vais pouvoir facilement mettre un code général qui fait sortir le joueur de la carte lors ce qu'il est au bord de celle-ci.
zoneneutre
zoneneutre
Membre

Nombre de messages : 129
Age : 31
Distinction : aucune
Date d'inscription : 17/03/2008

Taille d'une carte Empty Re: Taille d'une carte

le Sam 18 Fév 2012 - 14:22
Je crois me souvenir d'un tutoriel sur le site Oniromancie, qui permettait de faire ça en event.

Mais vu que le site plante je posterais le lien plus tard.
Drace
Drace
Membre

Nombre de messages : 177
Age : 28
Localisation : Sud de la France
Distinction : aucune
Date d'inscription : 27/12/2011

Taille d'une carte Empty Re: Taille d'une carte

le Sam 18 Fév 2012 - 15:56
Bhé c'est assez facile je pense :

Il suffit d'une variable X_héros et Y_héros.

Sur une map de 25x25 :

Si X_héros = 0 => Aller à tel endroit (gauche)
Si X_héros = 24 => Aller à tel endroit (droite)
Si Y_héros = 0 => Aller à tel endroit (haut)
Si Y_héros = 24 => Aller à tel endroit (bas)

Je crois que c'est ça pour les directions.
cator. lol
cator. lol
Membre

Nombre de messages : 164
Age : 28
Localisation : Cherche pas, tu me trouveras jamais.
Distinction : Zoophile à ses heures perdues, au torse poilu et qui chante YMCA
Frère de poils!
[Mist' Wink]
Maître du plantage d'arbres à femme : pour la sauvegarde des arbres et des petits oiseaux, vive la nature. [Balb' Wink]
crefadet le violeur du bois [Balb' Taille d'une carte 522164]
Date d'inscription : 02/02/2012

Taille d'une carte Empty Re: Taille d'une carte

le Sam 18 Fév 2012 - 18:32
Tu déplaces un événement vers la droite / le bas puis tu récupères ses coordonnées, et hop, voilà la taille de ta map =)
Jodge65
Jodge65
Membre

Nombre de messages : 189
Age : 23
Localisation : Dans le SûD!
Distinction : aucune
Date d'inscription : 25/03/2011

Taille d'une carte Empty Re: Taille d'une carte

le Sam 18 Fév 2012 - 18:52
Ben pourquoi ne pas placer 50 évènements au bord de la map?XD (je rigole! sa laggerai a mort...)
Mais sinon tu fait comme beaucoup: tu met du décor sur les bords pour forcé la personne a passer par tel ou tel endroit,
Ou tu met un chemin avec un seul évènement au bout (en prévenant au début).

C'est toujours plus simple que de faire 50 000 code qui risque de ne pas marcher... Après c'est a toi de voire....
thegrupfr
thegrupfr
Membre

Nombre de messages : 12
Distinction : aucune
Date d'inscription : 14/02/2012

Taille d'une carte Empty Re: Taille d'une carte

le Sam 18 Fév 2012 - 19:39
je suis tout a fais d'accord avec jodge c'est bien plus simple et beaucoup moins long a faire Wink
Drace
Drace
Membre

Nombre de messages : 177
Age : 28
Localisation : Sud de la France
Distinction : aucune
Date d'inscription : 27/12/2011

Taille d'une carte Empty Re: Taille d'une carte

le Sam 18 Fév 2012 - 19:57
Ce que Azelf ou moi même proposons ne sont en rien "50 000 codes qui risquent de ne pas marcher" !

Une case téléportation = 1 event

Donc pour un chemin de 3 cases qui mènent à un autre lieu (donc une seule direction) => 3 events
4 directions = 12 events !

Ce que je propose, c'est de récupérer les coordonnées du héros, et de faire en sorte que lorsque ce dernier touche un bord de la map, il se téléporte à l'endroit indiqué dans l'UNIQUE event, qui, de plus, n'est pas long du tout (10 lignes max).

En gros, 4 téléportations (les quatre coins de la map) en un seul event par map.

Alors avant de dire "c'est bien plus simple et beaucoup moins long a faire" réfléchis ^^
Jodge65
Jodge65
Membre

Nombre de messages : 189
Age : 23
Localisation : Dans le SûD!
Distinction : aucune
Date d'inscription : 25/03/2011

Taille d'une carte Empty Re: Taille d'une carte

le Sam 18 Fév 2012 - 21:12
Ben dans ce cas l'évènement vas être très long^^

il faut faire 4 groupe de deux conditions
----------------------------------------------------------------------------------------
>Condition varia X (position X du héro) = 0
>Téléporter l'équipe au position X2, Y2
>sinon
>
>Fin condition

>Condition varia X (position y du héro) = 0
>Téléporter l'équipe au position X2, Y2
>sinon
>
>Fin condition
>Condition varia X (position X du héro) = extrémiter droite de la map (clic sur une case de l'extrémiter droite*)
>Téléporter l'équipe au position X2, Y2
>sinon
>
>Fin condition

>Condition varia y (position y du héro) = extrémiter bas de la map (clic sur une case de l'extrémiter bas*)
>Téléporter l'équipe au position X2, Y2
>sinon
>
>Fin condition
----------------------------------------------------------------------------------------

téléportation de l'equipe

X2 = X pour Ydifférent de 0 et X-taille total de la map pour X=0

Y2 = Y pour Ydifférent de 0 et Y-taille total de la map pour Y=0


Capish?





* Clic et regarde sur le bas droite de l'ecran: les coordonnés (X,Y) de la case séléctionner
XGuarden
XGuarden
Membre

Nombre de messages : 38
Age : 35
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Taille d'une carte Empty Re: Taille d'une carte

le Sam 18 Fév 2012 - 22:19
En fait, je n'ai aucun problème a gérer les extrémité manuellement. Mon code marche très bien. Cependant, pour chaque carte, je doit changer le nombre équivalent à l'extrémité de la carte X et Y.

Je désire le récupéré pour pouvoir simplement copier coller cette event sur toute les maps.
Mon code genre déjà la gestion de carte père/fils et la téléportation se faut automatiquement
au bon endroit de la carte correspondante. Un seul évent pour gérer tout les escalier, les bordure, et
les trous de la map.

La raison pourquoi je fais cela est afin d'obtenir une uniformité de la programmation. Ca rend la programmation plus stable et plus prévisible. Ça permet a d’autre personne de comprendre la programmation facilement.

Surtout, ça sauve des milliers d'events.
Jodge65
Jodge65
Membre

Nombre de messages : 189
Age : 23
Localisation : Dans le SûD!
Distinction : aucune
Date d'inscription : 25/03/2011

Taille d'une carte Empty Re: Taille d'une carte

le Sam 18 Fév 2012 - 22:28
Ha ouai! Donc pour résumer tu veux pas tout rentrer a la main alors tu as besoin d'un script...

Mauvaise nouvelle: Les scripts qui ne sont pas suffisament demander ne sont généralement pas fait... tu peus toujours contacter certaint scripteur mais bon...
Pour la compatibiliter tu devrais pas avoir de soucis mais pour trouver un scripteur sa c'est autre chose...
XGuarden
XGuarden
Membre

Nombre de messages : 38
Age : 35
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Taille d'une carte Empty Re: Taille d'une carte

le Dim 19 Fév 2012 - 3:51
En fait, je dois toujorus rentrer des informations à la main. Cependant, il seront disponible dans des variable de configuration. Ca centralise les données et rend le code plus stable. Mais pas besoin de script. Il doit bien avoir un moyen de connaitre la dimension d'une carte sans script....
Jodge65
Jodge65
Membre

Nombre de messages : 189
Age : 23
Localisation : Dans le SûD!
Distinction : aucune
Date d'inscription : 25/03/2011

Taille d'une carte Empty Re: Taille d'une carte

le Dim 19 Fév 2012 - 10:59
Alors oui mais c'est très dur à gérer au début... Je te fais sa avant midi si j'ai le temps...
Juste une question: tu veux savoir toute lez coordonné ou juste celle différent de 0?

EDIT:
Alors c'est compliquer ^^":

Crée deux évènement situer a l'extrémiter haut gauche de la map et bas droite de la map. Pensent à les nommer ("pos haut gauche" et "pos bas droite" dans l'exemple)

Ensuite Créé un évènement automatique avec dedans:

>Opération: Varia[0001:haut Y] = [pos haut gauche] : Coordoner Y
>Opération: Varia[0002:gauche X] = [pos haut gauche] : Coordoner X
>Opération: Varia[0003:bas Y] = [pos bas droite] : Coordoner Y
>Opération: Varia[0004:droite X] = [pos bas droite] : Coordoner X
>Opération: intérupteur local A = Activer


Sa correspond en faite a fair "modifier une variable", "evenement", et changer "héro" par l'evenement qui convient dans le deuxieme cadre)

Ensuite tu crée une deuxieme page avec condition interrupteur local A activer et en processus parallèle:

>Boucle
>Opération: Varia[0005: Y du héro] = [Héro] : Coordoner Y ---(Connaitre la position Y du héro a quelque frame près)
>Opération: Varia[0006: X du héro] = [Héro] : Coordoner X ---(Connaitre la position X du héro a quelque frame près)
>Condition: si Variable [0006: X du héro] == Variable[0002:gauche X]---(égale)
>Condition: si Variable [0001:bas Y] >= Variable[0002:gauche X]---(superieur ou égale)
> ---------------------------------------------------------------------------(ici tu m'est la téléportation.)
>sinon
>
>Fin condition
>sinon
>
>Fin condition
>Condition: si Variable [0006: X du héro] == Variable[0004:droite X]---(égale)
>Condition: si Variable [0001:haut Y] <= Variable[0004:droite X]---(inferieur ou égale)
> ---------------------------------------------------------------------------(ici tu m'est la téléportation.)
>sinon
>
>Fin condition
>sinon
>
>Fin condition
>Condition: si Variable [0005: Y du héro] == Variable[0001:haut Y]---(égale)
>Condition: si Variable [0002:gauche X] <= Variable[0001:haut Y]---(inferieur ou égale)
> ---------------------------------------------------------------------------(ici tu m'est la téléportation.)
>sinon
>
>Fin condition
>sinon
>
>Fin condition
>Condition: si Variable [0005: Y du héro] == Variable[0003:bas Y]---(égale)
>Condition: si Variable [0004:droite X] >= Variable[0003:bas Y]---(superieur ou égale)
> ---------------------------------------------------------------------------(ici tu m'est la téléportation.)
>sinon
>
>Fin condition
>sinon
>
>Fin condition
> attendre 10 frames ---(évite le lag mais si le nombre de frame est trop élever le héro aura le temps de faire plusieur pas avant d'etre affecter: pour 60 frame en courant 5 pas...)
>Fin boucle


Cette évènement fait répondre chaque case sur les coter. ATTENTION:
les variables et le sens de la seconde condition sont très important. Une simple erreur peut soit echanger haut et bas soit rendre les conditions irréalisables.
Les cases au extrémiter des diagonals sont activées deux fois il faut donc trouver un moyen de les combler ou le héro se vera dechirer entre deux choix XD
Pour la téléportation je verrai plus tard mais j'ai déja une petit idée de comment faire... je verrai en utilisant le moin de variable possible mais à mon avis se sera 4 variables par map... je vais y réfléchir pour l'aléger Wink
XGuarden
XGuarden
Membre

Nombre de messages : 38
Age : 35
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Taille d'une carte Empty Re: Taille d'une carte

le Lun 20 Fév 2012 - 3:48
EN fait même si ta réponde n'est pas vraiment ce que je cherche, tu m'a quand même donné la solution.
En fait, je n'ai besoin que de savoir les coordonné max de X et Y et non toute les coordonnée.
Ce que me fait réaliser qu'il est possible de placer mon event qui gère les paramètre de la carte dans la cerniere case X Y du jeu plutôt que de le placer à 0 0. Ainsi, il me suffit de récupérer la position de mon event pour savoir le X et y max de la carte. Par contre, je reste un peu surpris qu'il n'existe rien de direct pour avoir la taille d'une carte.
Jodge65
Jodge65
Membre

Nombre de messages : 189
Age : 23
Localisation : Dans le SûD!
Distinction : aucune
Date d'inscription : 25/03/2011

Taille d'une carte Empty Re: Taille d'une carte

le Lun 20 Fév 2012 - 7:48
Il existe mais pas ingame... Ravi de t'avoir aider;-)
dricc
dricc
Membre

Nombre de messages : 2757
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Taille d'une carte Empty Re: Taille d'une carte

le Lun 20 Fév 2012 - 11:01
Bon, j'ai pas tout lu ...

Mais si j'ai bien pugé , ce que tu cherche est contenu dans :
$game_map.width
$game_map.heigth

Donc , tu peux faire
$game_variables[1]=$game_map.width
$game_variables[2]=$game_map.heigth

et tu auras dans les variables 1 et 2 la taille de la carte courante .
XGuarden
XGuarden
Membre

Nombre de messages : 38
Age : 35
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Taille d'une carte Empty Re: Taille d'une carte

le Mer 22 Fév 2012 - 7:16
Conseiller: Merci, ca améliore mon code =:0)
Petite question. J'aimerais savoir s'il y a un moyen d'utiliser un chiffre que serait noter dans les notes de la carte dans le code. AInsi, je pourais écrire dedans le numéro de la carte parent de chaque carte et ainsi créer un code automatisé.
Jodge65
Jodge65
Membre

Nombre de messages : 189
Age : 23
Localisation : Dans le SûD!
Distinction : aucune
Date d'inscription : 25/03/2011

Taille d'une carte Empty Re: Taille d'une carte

le Mer 22 Fév 2012 - 9:19
Tu veux sans doute parler de l'id d'une map... Si c'est sa, lorsque tu crée une map tu a le numéro qui apparaît... Le seul moyen est d'utiliser la commande id de la carte mais sa ne fonctionne que pour la carte en cour et sa le stock dans une variable.. Je pourrais peux être d'aider si tu détailler un peu plus...
dricc
dricc
Membre

Nombre de messages : 2757
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Taille d'une carte Empty Re: Taille d'une carte

le Mer 22 Fév 2012 - 10:59
Le numéro de la carte parent ?
pourquoi tu aurais besoin d'une note pour ça .

ceci :
$data_mapinfos[$game_map.map_id].parent_id

te donne l'id de la map parente directement .
XGuarden
XGuarden
Membre

Nombre de messages : 38
Age : 35
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Taille d'une carte Empty Re: Taille d'une carte

le Jeu 23 Fév 2012 - 6:16
Jep eu donner le id de la carte parent directement oui. Mais étant donnée le nombre d'occurence possible, je préfere la mettre à un seul endroit. Le mettre dans propriété de la carte me permettrait d'avoir un code plus homogene. Ca évite des tonne de bogue éventuelle.

Par exemple, un code qui appel un script et que le script retourne la valeur contenu dans info qui corecpond a l'id de la carte supérieur fonctionnerais. Mais rpg maker est plutot limité.
dricc
dricc
Membre

Nombre de messages : 2757
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Taille d'une carte Empty Re: Taille d'une carte

le Jeu 23 Fév 2012 - 12:44
Pas compris ...
d'occurence de quoi ??? quels bogues ?

Bon enfin bref , lire la note est pas si dur que ça .
tu dois d'abord modifier Game_Map pour qu'on voit la note à l'extérieur .
le plus simple est de faire ça :
Code:

class Game_Map
  attr_reader  :map
end

Et ensuite , tu dois pouvoir lire la note n'importe ou comme ça :
Code:

    parent = $game_map.map.note =~ /<parent=(\d+)\s*>/ ? $1.to_i: 0

en mettant dans la note .

J'ai pas testé ...
XGuarden
XGuarden
Membre

Nombre de messages : 38
Age : 35
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Taille d'une carte Empty Re: Taille d'une carte

le Jeu 1 Mar 2012 - 11:54
Petit détail que je ne suis pas certain de comprendre....
$data_mapinfos[$game_map.map_id].parent_id
Dans ce cas ci, comment RPG Maker défini t-il la carte parent? Il ne peut pas svoir quel carte je désire etre considéré comme carte parent. Il me renvoie le ID de quel carte?
Pour ce qui est du code:
parent = $game_map.map.note =~ // ? $1.to_i: 0
J'essaye de comprendre ce que ca fait. Le symbole =~ // ? $1.to_i: signifie quoi?
XGuarden
XGuarden
Membre

Nombre de messages : 38
Age : 35
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Taille d'une carte Empty Re: Taille d'une carte

le Jeu 1 Mar 2012 - 12:27
Bon, voici ou j'en suis. j'ai réfléchit un peu et commencer a comprendre certain truc. Par expemple, j'arrive a lire ce qui est dans les notes.

Présentement mes tests sont les suivants:
Dans les notes de la map je met:


Mon but est donc de pouvoir avoir un script qui retourne une de ces deux valeurs dépendament de celle que j'ai besoin.
le code: $game_map.map.note fonctionne puisque j'ai ajouté dans les scripts:
class Game_Map
attr_reader :map
end
Ton code générais une erreur et je n'ai pas réussit à le comprendre.
Le problèmes est bien sur que sa me donne toute ce qui est dans les commentaires.
J'ai donc essayer de faire quelque chose comme ça:
class Game_Map
attr_reader :map
FORCE_UP = /<(?:FORCE_UP|force up):[ ]*(\d+(?:\s*,\s*\d+)*)>/i
attr_reader :force_up
@force_up = []
def load_notetags_fmt
@map_inf = []
@map_sup = []

#---
self.note.split(/[\r\n]+/).each { |line|
case line
#---
when Game_Map::map_inf
$1.scan(/\d+/).each { |num|
@force_up.push(num.to_i) if num.to_i > 0 }
when Game_Map::map_sup
$1.scan(/\d+/).each { |num|
@force_down.push(num.to_i) if num.to_i > 0 }
#---
end
} # self.note.split
#---
end

end


Finnalement, rien ne fonctionne. Je ne m'y connais pas suffisement en script pour coder. J'ontien un undefined method force_up.

Merci pour vos conseil.
dricc
dricc
Membre

Nombre de messages : 2757
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Taille d'une carte Empty Re: Taille d'une carte

le Jeu 1 Mar 2012 - 20:23
Déja utilise des balises , sinon on voit pas bien .

Bon , puisqu'il te dit que force_up n'est pas initialisé , on va le faire ...
j'utilise un alias pour ça comme ça :

Code:

class Game_Map
  attr_reader  :map
  FORCE_UP    = /<(?:FORCE_UP|force up):[ ]*(\d+(?:\s*,\s*\d+)*)>/i
  attr_reader  :force_up
  alias old_initialize initialize
  def initialize
    old_initialize
  @force_up = []
  end
  def load_notetags_fmt
    @map_inf = []
    @map_sup = []
    #---
    self.note.split(/[\r\n]+/).each { |line|
      case line
      #---
      when Game_Map::map_inf
        $1.scan(/\d+/).each { |num|
        @force_up.push(num.to_i) if num.to_i > 0 }
      when Game_Map::map_sup
        $1.scan(/\d+/).each { |num|
        @force_down.push(num.to_i) if num.to_i > 0 }
      #---
      end
    } # self.note.split
    #---
  end
 
end
XGuarden
XGuarden
Membre

Nombre de messages : 38
Age : 35
Localisation : Québec
Distinction : aucune
Date d'inscription : 19/12/2011

Taille d'une carte Empty Re: Taille d'une carte

le Jeu 1 Mar 2012 - 23:07
En fait, force_up est une grossière erreur. J'ai copier du code d’ailleurs et ça rester. J'ai arrivé depuis a corriger ça. Par contre la valeur a toujours resté à 0 quand j'essaye de la faire afficher.

Mon code actuelle est comme ça:
class Game_Map
attr_reader :map
FORCE_UP = /<(?:FORCE_UP|force up):[ ]*(\d+(?:\s*,\s*\d+)*)>/i
attr_reader :map_inf
attr_reader :map_sup
alias old_initialize initialize
def initialize
old_initialize
@map_inf = []
@map_sup = []
end
def load_notetags_fmt
@map_inf = []
@map_sup = []
#---
self.note.split(/[\r\n]+/).each { |line|
case line
#---
when Game_Map::map_inf
$1.scan(/\d+/).each { |num|
@force_up.push(num.to_i) if num.to_i > 0 }
when Game_Map::map_sup
$1.scan(/\d+/).each { |num|
@force_down.push(num.to_i) if num.to_i > 0 }
#---
end
} # self.note.split
#---
end

end



Cependant, maintenant, ça fait afficher [] quand je fais afficher le contenu de la variable dans laquel j'ai stoqué $game_map.map_sup

Il est possible que mon code au complet soit pas bon. Apres tout, c'est une tentative avec du copier coller en changer des petites truc.
Balbereith
Balbereith
Staffeux retraité

Nombre de messages : 4129
Age : 26
Localisation : dans l'ombre...
Distinction : Péripatéticienne à temps perdu
Helly n°666 [Coco' ;D]
mon ptit balbounet p'tit jardinier en herbe(les râteaux ça le connait) [tonton Adurna]
Cultivateur professionnel de la commu' (il a de bons outils en de nombreux exemplaires Taille d'une carte 522164 ) [Coco' Smile]
Date d'inscription : 13/05/2009

Taille d'une carte Empty Re: Taille d'une carte

le Dim 15 Juil 2012 - 20:21
Inactif, donc locké et déplacé.

Pour une réouverture, envoyer un message dans la boîte aux lettres.
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum