| Rendre un event traversable sans qu'il traverse le décor. | |
|
|
Auteur | Message |
---|
Dom Paysan (niveau 4)
Messages postés : 34 Date d'inscription : 02/03/2013 Jauge LPC :
| Sujet: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 12:44 | |
| Hello,
Le problème auquel je me heurte est le suivant : Si je met l'event en "traverse tout" il peut traverser le héros (c'est ce que je veux) mais il traverse aussi les décors (ce que je ne veux pas !) Est-ce possible qu'il puisse traverser le héros sans pour autant traverser le décor ?
Merci. |
|
| |
Joke Mage (niveau 5)
Messages postés : 367 Date d'inscription : 10/06/2012 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 13:31 | |
| Quel RM ? Sauf RMXP (?) on peut mettre l'événement sous ou au-dessus du héros, il traverse le héros sans traverser le décor
Si t'es sous RM XP, VX, Ace, on peut savoir si un carreaux de la map est passable ou non (Sous VX, "$game_player.passable?(X, Y)" mais ça inclut le héros et autre événements "contre le héros" dans l'information "false=non passable"), on peut jouer avec pour vérifier à chaque pas de l'événement si sa destination est passable ou non, pour valider le pas ou on faire un autre dans une direction passable. |
|
| |
Dom Paysan (niveau 4)
Messages postés : 34 Date d'inscription : 02/03/2013 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 13:56 | |
| Erf désolé je n'ai pas précisé, je suis sur RMXP. |
|
| |
Joke Mage (niveau 5)
Messages postés : 367 Date d'inscription : 10/06/2012 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 14:03 | |
| Tu veux coder quoi exactement en fait ? Car faire exactement ce que tu veux peut être plus compliqué que faire autre chose qui reviendrait au même. |
|
| |
Dom Paysan (niveau 4)
Messages postés : 34 Date d'inscription : 02/03/2013 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 14:11 | |
| Je réexplique: Si je mets l'event en "traverse tout" il traverse bien le héros mais passe aussi à travers les tilesets bloqués. Je voudrais que certaines event puissent traverser le héros sans qu'ils puissent traverser les tilesets bloqués.
Je ne sais pas si c'est plus clair mais je ne vois pas comment expliquer ça autrement ^^' |
|
| |
Jin Ancien staffeux
Messages postés : 8557 Date d'inscription : 08/12/2010 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 15:36 | |
| |
|
| |
Ti-Max Membre V.I.P.
Messages postés : 2260 Date d'inscription : 11/07/2012 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 15:45 | |
| C'est exactement de cette façon que je pensais aussi. Mais c'était long à expliquer... J'avais oublier le tutoriel. ^^' |
|
| |
Dom Paysan (niveau 4)
Messages postés : 34 Date d'inscription : 02/03/2013 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 15:54 | |
| Je zieute (du verbe zieuter !) et je vous dit ça, merci : ) |
|
| |
Jin Ancien staffeux
Messages postés : 8557 Date d'inscription : 08/12/2010 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 15:59 | |
| Si tu as des soucis, MP moi ou post ici |
|
| |
Elekami Fondateur
Messages postés : 19071 Date d'inscription : 19/07/2008 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 16:03 | |
| On dit zyeuter, avec un "y" (ça se dit bel et bien). |
|
| |
Dom Paysan (niveau 4)
Messages postés : 34 Date d'inscription : 02/03/2013 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 16:16 | |
| - Elekami a écrit:
- On dit zyeuter, avec un "y" (ça se dit bel et bien).
Nia nia nia ! :p Si j'ai bien compris, ça permet de définir un point de rencontre avec un event dans un rayon de X cases autour de l'event ? Ce que je n'ai pas compris c'est ce que je dois rendre traversable, l'event où le héros ? Puis si je les rends traversables et qu'ils bougent ils vont traverser le décor. Je vous avoue que j'ai un peu de mal à comprendre le tuto et que les maths ne sont pas mon fort sans compter que ça fait quasiment 20 ans que j'ai appris ça et que depuis je ne m'en suis plus jamais servi x) Maintenant j'avoue que ça me semble un peu laborieux à utiliser pour moi et qu'à la base j'aurais aimé une petite modif de script permettant de dire que le l'event peut traverser le héros sans pouvoir traverser les décors. Donc si vous avez une solution de ce genre ça m'intéresse d'avantage. Merci de vos efforts et désolé du dérangement :s |
|
| |
Jin Ancien staffeux
Messages postés : 8557 Date d'inscription : 08/12/2010 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 16:26 | |
| Ah ok je vois ^^
J'vais essayé de te coder un truc. Mais je suis pas sur d'y arriver ^^ |
|
| |
Jin Ancien staffeux
Messages postés : 8557 Date d'inscription : 08/12/2010 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 18:14 | |
| Mets ca au dessus de main : - Code:
-
#============================================================================== # ** Game_Character (part 1) #------------------------------------------------------------------------------ # This class deals with characters. It's used as a superclass for the # Game_Player and Game_Event classes. #==============================================================================
class Game_Character #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_reader :id # ID attr_reader :x # map x-coordinate (logical) attr_reader :y # map y-coordinate (logical) attr_reader :real_x # map x-coordinate (real * 128) attr_reader :real_y # map y-coordinate (real * 128) attr_reader :tile_id # tile ID (invalid if 0) attr_reader :character_name # character file name attr_reader :character_hue # character hue attr_reader :opacity # opacity level attr_reader :blend_type # blending method attr_reader :direction # direction attr_reader :pattern # pattern attr_reader :move_route_forcing # forced move route flag attr_reader :through # through attr_accessor :animation_id # animation ID attr_accessor :transparent # transparent flag #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize @id = 0 @x = 0 @y = 0 @real_x = 0 @real_y = 0 @tile_id = 0 @character_name = "" @character_hue = 0 @opacity = 255 @blend_type = 0 @direction = 2 @pattern = 0 @move_route_forcing = false @through = false @animation_id = 0 @transparent = false @original_direction = 2 @original_pattern = 0 @move_type = 0 @move_speed = 4 @move_frequency = 6 @move_route = nil @move_route_index = 0 @original_move_route = nil @original_move_route_index = 0 @walk_anime = true @step_anime = false @direction_fix = false @always_on_top = false @anime_count = 0 @stop_count = 0 @jump_count = 0 @jump_peak = 0 @wait_count = 0 @locked = false @prelock_direction = 0 end #-------------------------------------------------------------------------- # * Determine if Moving #-------------------------------------------------------------------------- def moving? # If logical coordinates differ from real coordinates, # movement is occurring. return (@real_x != @x * 128 or @real_y != @y * 128) end #-------------------------------------------------------------------------- # * Determine if Jumping #-------------------------------------------------------------------------- def jumping? # A jump is occurring if jump count is larger than 0 return @jump_count > 0 end #-------------------------------------------------------------------------- # * Straighten Position #-------------------------------------------------------------------------- def straighten # If moving animation or stop animation is ON if @walk_anime or @step_anime # Set pattern to 0 @pattern = 0 end # Clear animation count @anime_count = 0 # Clear prelock direction @prelock_direction = 0 end #-------------------------------------------------------------------------- # * Force Move Route # move_route : new move route #-------------------------------------------------------------------------- def force_move_route(move_route) # Save original move route if @original_move_route == nil @original_move_route = @move_route @original_move_route_index = @move_route_index end # Change move route @move_route = move_route @move_route_index = 0 # Set forced move route flag @move_route_forcing = true # Clear prelock direction @prelock_direction = 0 # Clear wait count @wait_count = 0 # Move cutsom move_type_custom end #-------------------------------------------------------------------------- # * Determine if Passable # x : x-coordinate # y : y-coordinate # d : direction (0,2,4,6,8) # * 0 = Determines if all directions are impassable (for jumping) #-------------------------------------------------------------------------- def passable?(x, y, d) # Get new coordinates new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0) new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0) # If coordinates are outside of map unless $game_map.valid?(new_x, new_y) # impassable return false end # If through is ON if @through # passable return true end # If unable to leave first move tile in designated direction unless $game_map.passable?(x, y, d, self) # impassable return false end # If unable to enter move tile in designated direction unless $game_map.passable?(new_x, new_y, 10 - d) # impassable return false end # Loop all events for event in $game_map.events.values # If event coordinates are consistent with move destination if event.x == new_x and event.y == new_y if Input.trigger?(Input::A) return true end end if event.x == new_x and event.y == new_y # If through is OFF unless event.through # If self is event if self != $game_player # impassable return false end # With self as the player and partner graphic as character if event.character_name != "" # impassable return false end end end end # If player coordinates are consistent with move destination if $game_player.x == new_x and $game_player.y == new_y # If through is OFF unless $game_player.through # If your own graphic is the character if @character_name != "" # impassable return false end end end # passable return true end #-------------------------------------------------------------------------- # * Lock #-------------------------------------------------------------------------- def lock # If already locked if @locked # End method return end # Save prelock direction @prelock_direction = @direction # Turn toward player turn_toward_player # Set locked flag @locked = true end #-------------------------------------------------------------------------- # * Determine if Locked #-------------------------------------------------------------------------- def lock? return @locked end #-------------------------------------------------------------------------- # * Unlock #-------------------------------------------------------------------------- def unlock # If not locked unless @locked # End method return end # Clear locked flag @locked = false # If direction is not fixed unless @direction_fix # If prelock direction is saved if @prelock_direction != 0 # Restore prelock direction @direction = @prelock_direction end end end #-------------------------------------------------------------------------- # * Move to Designated Position # x : x-coordinate # y : y-coordinate #-------------------------------------------------------------------------- def moveto(x, y) @x = x % $game_map.width @y = y % $game_map.height @real_x = @x * 128 @real_y = @y * 128 @prelock_direction = 0 end #-------------------------------------------------------------------------- # * Get Screen X-Coordinates #-------------------------------------------------------------------------- def screen_x # Get screen coordinates from real coordinates and map display position return (@real_x - $game_map.display_x + 3) / 4 + 16 end #-------------------------------------------------------------------------- # * Get Screen Y-Coordinates #-------------------------------------------------------------------------- def screen_y # Get screen coordinates from real coordinates and map display position y = (@real_y - $game_map.display_y + 3) / 4 + 32 # Make y-coordinate smaller via jump count if @jump_count >= @jump_peak n = @jump_count - @jump_peak else n = @jump_peak - @jump_count end return y - (@jump_peak * @jump_peak - n * n) / 2 end #-------------------------------------------------------------------------- # * Get Screen Z-Coordinates # height : character height #-------------------------------------------------------------------------- def screen_z(height = 0) # If display flag on closest surface is ON if @always_on_top # 999, unconditional return 999 end # Get screen coordinates from real coordinates and map display position z = (@real_y - $game_map.display_y + 3) / 4 + 32 # If tile if @tile_id > 0 # Add tile priority * 32 return z + $game_map.priorities[@tile_id] * 32 # If character else # If height exceeds 32, then add 31 return z + ((height > 32) ? 31 : 0) end end #-------------------------------------------------------------------------- # * Get Thicket Depth #-------------------------------------------------------------------------- def bush_depth # If tile, or if display flag on the closest surface is ON if @tile_id > 0 or @always_on_top return 0 end # If element tile other than jumping, then 12; anything else = 0 if @jump_count == 0 and $game_map.bush?(@x, @y) return 12 else return 0 end end #-------------------------------------------------------------------------- # * Get Terrain Tag #-------------------------------------------------------------------------- def terrain_tag return $game_map.terrain_tag(@x, @y) end end
Il te suffit d'appuyé sur shift pour passer au travers.
Dernière édition par Jin le Dim 3 Mar 2013 - 21:27, édité 1 fois |
|
| |
Dom Paysan (niveau 4)
Messages postés : 34 Date d'inscription : 02/03/2013 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 19:19 | |
| Alors toi, je t'aime !! Pour ne pas devoir appuyer sur la touche, j'ai juste modifié : - Code:
-
if Input.trigger?(Input::A) return true par - Code:
-
if Input.trigger?(Input::A) return true else return true
Et ça me donne exactement ce que je voulais : ) Un énorme merci !! Résolu. |
|
| |
Joke Mage (niveau 5)
Messages postés : 367 Date d'inscription : 10/06/2012 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 19:48 | |
| - Dom a écrit:
Pour ne pas devoir appuyer sur la touche, j'ai juste modifié :
- Code:
-
if Input.trigger?(Input::A) return true par - Code:
-
if Input.trigger?(Input::A) return true else return true
Et ça me donne exactement ce que je voulais : )
Tu devrais plutôt remplacer par : - Code:
-
if Input.trigger?(Input::A) return true elsif Input.trigger?(Input::B) return true if !(Input.trigger?(Input::A)) elsif Input.trigger?(Input::C) return true if !(Input.trigger?(Input::B)) elsif Input.trigger?(Input::D) return true if !(Input.trigger?(Input::C)) elsif Input.trigger?(Input::E) return true if !(Input.trigger?(Input::D)) else return true if !(Input.trigger?(Input::E)) end C'est plus optimisé |
|
| |
Magicalichigo Ancienne staffeuse
Messages postés : 4252 Date d'inscription : 02/08/2011 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 20:06 | |
| Bon, allez, on va arrêter de dire des bêtises à l'emporte pièce. La solution de Jin est mauvaise et celle de Joke est sarcastique et celle de Dom n'a pas de sens ! Réfléchissez au problème avec intelligence ! PS : Le tutoriel de Jin n'a pas grand chose à voir |
|
| |
Joke Mage (niveau 5)
Messages postés : 367 Date d'inscription : 10/06/2012 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 20:13 | |
| Enfin l'important c'est que le problème soit résolu, distribution de point LPDM moi je dis : ) |
|
| |
Invité Invité
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 20:15 | |
| |
|
| |
Jin Ancien staffeux
Messages postés : 8557 Date d'inscription : 08/12/2010 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 20:37 | |
| Dom, si j'ai mis la touche shift pour passer au travers, c'est pour éviter de passer au travers si tu veux parler au PNJ.
Dernière édition par Jin le Lun 4 Mar 2013 - 1:35, édité 1 fois |
|
| |
Dom Paysan (niveau 4)
Messages postés : 34 Date d'inscription : 02/03/2013 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 21:07 | |
| C'est ptet le seul souci que j'ai rencontré, ça traverse les events qui on un charset mais pas ceux qui appartiennent à un tilset. Mis à part ça, ça me convient. Et Mlle Magi (si je peux me permettre ^^) ma solution n'a pas de sens parce que je suis une bille en ruby , je suis donc excusable :p (Comment ça excuse de merde ? ><) |
|
| |
Jin Ancien staffeux
Messages postés : 8557 Date d'inscription : 08/12/2010 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 21:11 | |
| Pour ce qui est des events en mapping, c'est normal, car le passage de tileset est enregistré dans l'event, et le script ne permet pas de passer au travers du tileset. =)
Dernière édition par Jin le Lun 4 Mar 2013 - 1:40, édité 1 fois |
|
| |
Jin Ancien staffeux
Messages postés : 8557 Date d'inscription : 08/12/2010 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 21:39 | |
| Toujours est il que son pb est résolu, et que les remarques sur mon comportement, je m'en fais un rouleau de PQ ! ( pour rester dans le thème du caca.) Tiens le vla le monkey Patching x) (enfin je crois) - Code:
-
class Game_Character alias new_passable? passable? def passable?(x, y, d) new_passable?(x, y, d) # Get new coordinates new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0) new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0) # If coordinates are outside of map unless $game_map.valid?(new_x, new_y) # impassable return false end # If through is ON if @through # passable return true end # If unable to leave first move tile in designated direction unless $game_map.passable?(x, y, d, self) # impassable return false end # If unable to enter move tile in designated direction unless $game_map.passable?(new_x, new_y, 10 - d) # impassable return false end # Loop all events nb_press = 0 for event in $game_map.events.values # If event coordinates are consistent with move destination if event.x == new_x and event.y == new_y if Input.trigger?(Input::A) return true end end if event.x == new_x and event.y == new_y # If through is OFF unless event.through # If self is event if self != $game_player # impassable return false end # With self as the player and partner graphic as character if event.character_name != "" # impassable return false end end end end # If player coordinates are consistent with move destination if $game_player.x == new_x and $game_player.y == new_y # If through is OFF unless $game_player.through # If your own graphic is the character if @character_name != "" # impassable return false end end end # passable return true end end |
|
| |
Dom Paysan (niveau 4)
Messages postés : 34 Date d'inscription : 02/03/2013 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 21:44 | |
| C'est peut-être un peu de ma faute aussi, j'aurais du expliquer plus clairement le contexte de ma demande, ce n'est ps toujours évident :s Faut pas vous fâcher pour ça :s
Dans mon projet, les collisions d'un monstre avec mon héros se fait par une page règlée sur "contact avec l'évenement" et ça fonctionne bien seulement, je voulais juste gagner du temps en mettant le déclenchement en parrallèle à l'aide de variables
pos X= pos X heros pos Y= Pos Y héros Pos Enn01 X = Position ennemi01 X Pos Enn01 Y = Position ennemi01 Y
Condition si posX = pos enn01x Condition si posY = pos enn01y alors Degat sur le héros
Et ainsi de suite pour les calculs d'impactes des armes
En déclenchement parallèle ça me permettait d'avoir une collision plus réaliste et de pouvoir dans la même page inclure toutes les formules de collision des armes.
Donc d'un event de 5-6 pages, je passait à un event d'une page, un très beau gain de temps pour moi. Donc la solution la plus proche que j'ai eu est celle de Jin, sachant que je me suis sans doute pas super bien expliqué. Mais bon, j'ai mis que c'était résolu et je vais me débrouiller avec la solution de Jin.
Encore merci. |
|
| |
Zexion Administrateur
Messages postés : 6228 Date d'inscription : 04/01/2012 Jauge LPC :
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 21:55 | |
| Magi va passer modo une semaine. o/
GG Jin ! |
|
| |
Invité Invité
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. Dim 3 Mar 2013 - 22:18 | |
| - Zexion a écrit:
- Magi va passer modo une semaine. o/
GG Jin ! H.S |
|
| |
Contenu sponsorisé
| Sujet: Re: Rendre un event traversable sans qu'il traverse le décor. | |
| |
|
| |
|