|
| [Résolu]Faire bouger le héros pixel par pixel | |
| Auteur | Message |
---|
kreiss Ninja (niveau 5)
Messages postés : 235 Date d'inscription : 05/12/2012 Jauge LPC :
| Sujet: [Résolu]Faire bouger le héros pixel par pixel Mar 7 Avr 2015 - 17:34 | |
| Salut !
Je voulais savoir si il est possible de faire bouger le héros pixel par pixel automatiquement (Sans appuyer une touche) via un appel de script par exemple.
Je sais pas si vous m'avez bien compris... xD Merci d'avance pour votre aide !
Dernière édition par kreiss le Mer 8 Avr 2015 - 19:23, édité 1 fois |
| | | Zexion Administrateur
Messages postés : 6228 Date d'inscription : 04/01/2012 Jauge LPC :
| Sujet: Re: [Résolu]Faire bouger le héros pixel par pixel Mar 7 Avr 2015 - 18:50 | |
| De base non tout simplement parce que le système de base n'admet pas de déplacement pixels par pixels. Mais selon le script de déplacement que tu utilises c'est pas impossible. |
| | | Kasbak Membre V.I.P.
Messages postés : 1356 Date d'inscription : 05/01/2013 Jauge LPC :
| Sujet: Re: [Résolu]Faire bouger le héros pixel par pixel Mar 7 Avr 2015 - 21:44 | |
| Tu peux le faire en event tu prend le héros tu modifie son emplacement de 1 pixel ou alors tu le met en image tu bouge l'image de un,sinon avec un script de déplacement oui. |
| | | Jin Ancien staffeux
Messages postés : 8557 Date d'inscription : 08/12/2010 Jauge LPC :
| Sujet: Re: [Résolu]Faire bouger le héros pixel par pixel Mar 7 Avr 2015 - 21:48 | |
| le coup de l'image c'est bof. Surtout pour les collisions. Décaler l'image sur le charset c'est un coup à foiré des trucs x)
Le plus adapté c'est un script. |
| | | kreiss Ninja (niveau 5)
Messages postés : 235 Date d'inscription : 05/12/2012 Jauge LPC :
| Sujet: Re: [Résolu]Faire bouger le héros pixel par pixel Mar 7 Avr 2015 - 23:57 | |
| J'avais pensé la même chose pour le coup des images, mais comme la dit Jin, pour les collisions c'est pas le top. |
| | | Kasbak Membre V.I.P.
Messages postés : 1356 Date d'inscription : 05/01/2013 Jauge LPC :
| Sujet: Re: [Résolu]Faire bouger le héros pixel par pixel Mer 8 Avr 2015 - 2:06 | |
| Ouai mais je sais pas trop c'est pour faire quoi,une cinématique c'est pas genant apres si y'a une gestion de collision ouai là c'est pas top.T'as regarder sur le script de l'AMS de zeus ? C'est du pixel je crois,ça peu marcher peu etre faudrais que tu regarde. |
| | | kreiss Ninja (niveau 5)
Messages postés : 235 Date d'inscription : 05/12/2012 Jauge LPC :
| Sujet: Re: [Résolu]Faire bouger le héros pixel par pixel Mer 8 Avr 2015 - 10:55 | |
| Oui j'ai regardé le script de l'AMS de Zeus, mais il n'y a pas ce que je cherche. En gros c'est pour faire un CBS, les sprites sont centrés sur le héros. Et c'est surtout pour gérer un système de scrolling de l'écran plus facilement. (Le héros est invisible.) Par exemple quand je tape le monstre et que je le fais reculer, il reculera d'une case, au lieu d'un pixel. C'est pas très jolie... |
| | | Zexion Administrateur
Messages postés : 6228 Date d'inscription : 04/01/2012 Jauge LPC :
| Sujet: Re: [Résolu]Faire bouger le héros pixel par pixel Mer 8 Avr 2015 - 16:19 | |
| J'ai dans un de mes vieux projets ce script pour RPG Maker XP dont Siegfried est l'auteur, et qui gère des déplacements en quarts de cases (8 pixels). Si je le partage, c'est parce qu'il est possible d'utiliser ces commandes de script : - Code:
-
move_down_quarter move_left_quarter move_right_quarter move_up_quarter dans la commande "Déplacer/modifier un événement" pour déplacer le héros ou un événement d'un quart de case. - Code:
-
#============================================================================== # o Quarter 3.1.1 #------------------------------------------------------------------------------ # Script de déplacement en quart de cases #------------------------------------------------------------------------------ # Fait par Siegfried pour Legacy of Judge : Veil of Oblivion # Remerciement à MGCaladtogel #------------------------------------------------------------------------------ # Ce script provient de Saleth Empire # Vous trouverez du support à l'adresse suivante : # http://saleth-empire.amk.servhome.org/forum/viewtopic.php?t=2517 #------------------------------------------------------------------------------ # Nécessite : -Original_Character (script de gestion des changements de characters) # -Game_Player, méthode update revue (gestion de l'appui des touches directionnelles) # -EREC (changement de charset) # -Diag (déplacement en diagonale, optionnel) #------------------------------------------------------------------------------ # Méthodes remplacées : # -check_event_trigger_touch (Game_Player) # -check_event_trigger_here (Game_Player) # -check_event_trigger_there (Game_Player) #==============================================================================
#============================================================================== # o Game_System #============================================================================== class Game_System #-------------------------------------------------------------------------- # o Quarter Aliases #-------------------------------------------------------------------------- alias quarter_initialize initialize def initialize quarter_config quarter_initialize end #-------------------------------------------------------------------------- # o Quarter Config #-------------------------------------------------------------------------- def quarter_config @quarter_system_on = true end attr_accessor :quarter_system_on end
#============================================================================== # o Object #============================================================================== class Object #-------------------------------------------------------------------------- # o Has_method? #-------------------------------------------------------------------------- def has_method?(method_name) return methods.include?(method_name) end end
#============================================================================== # o Game_Player #============================================================================== class Game_Player < Game_Character #-------------------------------------------------------------------------- # o Update_move_keys #-------------------------------------------------------------------------- alias quarter_update_move_keys update_move_keys def update_move_keys if $game_system.quarter_system_on if $game_system.has_method?("diag_system_on") and $game_system.diag_system_on move_8_directions_quarter else move_4_directions_quarter end else quarter_update_move_keys end end #-------------------------------------------------------------------------- # o Move_4_directions_quarter #-------------------------------------------------------------------------- def move_4_directions_quarter case Input.dir4 when 2 move_down_quarter when 4 move_left_quarter when 6 move_right_quarter when 8 move_up_quarter end end #-------------------------------------------------------------------------- # o Move_8_directions_quarter #-------------------------------------------------------------------------- def move_8_directions_quarter case Input.dir8 when 1 move_lower_left_quarter when 2 move_down_quarter when 3 move_lower_right_quarter when 4 move_left_quarter when 6 move_right_quarter when 7 move_upper_left_quarter when 8 move_up_quarter when 9 move_upper_right_quarter end end #-------------------------------------------------------------------------- # o Check_event_trigger_touch #-------------------------------------------------------------------------- def check_event_trigger_touch(x, y) result = false if $game_system.map_interpreter.running? return result end for event in $game_map.events.values m = event.real_x / 128.0 n = event.real_y / 128.0 if Math.sqrt((m - x) ** 2 + (n - y) ** 2) < 0.7 and [1,2].include?(event.trigger) if not event.jumping? and not event.over_trigger? event.start result = true end end end return result end #-------------------------------------------------------------------------- # o Check_event_trigger_here #-------------------------------------------------------------------------- def check_event_trigger_here(triggers) result = false if $game_system.map_interpreter.running? return result end for event in $game_map.events.values if ((event.x - $game_player.x).abs < 0.5) and ((event.y - $game_player.y).abs < 0.5) and triggers.include?(event.trigger) if not event.jumping? and event.over_trigger? event.start result = true end end end return result end #-------------------------------------------------------------------------- # o Check_event_trigger_there #-------------------------------------------------------------------------- def check_event_trigger_there(triggers) result = false if $game_system.map_interpreter.running? return result end @test_event = @x + 0.25 new_x = @test_event.to_i + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0) @test_event = @y + 0.25 new_y = @test_event.to_i + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0) for event in $game_map.events.values if event.x == new_x and event.y == new_y and triggers.include?(event.trigger) if not event.jumping? and not event.over_trigger? event.start result = true end end end if result == false if $game_map.counter?(new_x, new_y) new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0) new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0) for event in $game_map.events.values if event.x == new_x and event.y == new_y and triggers.include?(event.trigger) if not event.jumping? event.start result = true end end end end end return result end end
#============================================================================== # o Game_Character #============================================================================== class Game_Character #-------------------------------------------------------------------------- # o Attributs #-------------------------------------------------------------------------- attr_accessor :x attr_accessor :y #-------------------------------------------------------------------------- # o Pass_chara? #-------------------------------------------------------------------------- def pass_chara?(x, y, d) new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0) new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0) for event in $game_map.events.values if event.x.int_sup == new_x and event.y.int_sup == new_y unless event.through if self != $game_player return false end if event.character_name != "" return false end end end end if $game_player.x.int_sup == new_x and $game_player.y.int_sup == new_y unless $game_player.through if @character_name != "" return false end end end return true end #-------------------------------------------------------------------------- # o Pass_chara_quarter? #-------------------------------------------------------------------------- def pass_chara_quarter?(x, y, d) new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0) new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0) for event in $game_map.events.values if event.through return true else if ((d == 2 or d == 8) and event.x.in_between?(new_x - 0.75, new_x + 0.75) and event.y == new_y) or ((d == 4 or d == 6) and event.x == new_x and event.y.in_between?(new_y - 0.75, new_y + 0.75)) if self != $game_player or event.character_name != "" return false end end end end if $game_player.through return true else if ((d == 2 or d == 8) and $game_player.x.in_between?(new_x - 0.75, new_x + 0.75) and $game_player.y == new_y) or ((d == 4 or d == 6) and $game_player.x == new_x and $game_player.y.in_between?(new_y - 0.75, new_y + 0.75)) if @character_name != "" return false end end end return true end #-------------------------------------------------------------------------- # o Tests de passabilité #-------------------------------------------------------------------------- def pass_down?(x = @x, y = @y) new_y = y.to_i if pass_chara_quarter?(x, y, 2) and passable?(x.to_i, new_y, 2) and passable?((x + 0.75).to_i, new_y, 2) and ((passable?(x.to_i + 1, new_y + 1, 4) and x % 1 != 0) or x % 1 == 0) return true end end def pass_left?(x = @x, y = @y) new_x = x.int_sup if pass_chara_quarter?(x, y, 4) and passable?(new_x, y.to_i, 4) and passable?(new_x, (y + 0.75).to_i, 4) and ((passable?(new_x - 1, y.to_i, 2) and y % 1 != 0) or y % 1 == 0) return true end end def pass_right?(x = @x, y = @y) new_x = x.to_i if pass_chara_quarter?(x, y, 6) and passable?(new_x, y.to_i, 6) and passable?(new_x, (y + 0.75).to_i, 6) and ((passable?(new_x + 1, y.to_i, 2) and y % 1 != 0) or y % 1 == 0) return true end end
def pass_up?(x = @x, y = @y) new_y = y.int_sup if pass_chara_quarter?(x, y, 8) and passable?(x.to_i, new_y, 8) and passable?((x + 0.75).to_i, new_y, 8) and ((passable?(x.to_i + 1, new_y - 1, 4) and x % 1 != 0) or x % 1 == 0) return true end end #-------------------------------------------------------------------------- # o Pas directionnels entiers #-------------------------------------------------------------------------- alias quarter_move_down move_down def move_down(turn_enabled = true) turn_down if turn_enabled if pass_chara?(@x, @y, 2) or @through quarter_move_down(turn_enabled) end check_event_trigger_touch(@x, @y + 1) end alias quarter_move_left move_left def move_left(turn_enabled = true) turn_left if turn_enabled if pass_chara?(@x, @y, 4) or @through quarter_move_left(turn_enabled) end check_event_trigger_touch(@x - 1, @y) end alias quarter_move_right move_right def move_right(turn_enabled = true) turn_right if turn_enabled if pass_chara?(@x, @y, 6) or @through quarter_move_right(turn_enabled) end check_event_trigger_touch(@x + 1, @y) end alias quarter_move_up move_up def move_up(turn_enabled = true) turn_up if turn_enabled if pass_chara?(@x, @y, 8) or @through quarter_move_up(turn_enabled) end check_event_trigger_touch(@x, @y + 1) end #-------------------------------------------------------------------------- # o Pas directionnels par quart #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- # o Move_down_quarter #-------------------------------------------------------------------------- def move_down_quarter(turn_enabled = true) turn_down if pass_down? @y += 0.25 increase_steps else check_event_trigger_touch((@x + 0.5).to_i, @y + 1) end end #-------------------------------------------------------------------------- # o Move_left_quarter #-------------------------------------------------------------------------- def move_left_quarter(turn_enabled = true) turn_left if pass_left? @x -= 0.25 increase_steps else check_event_trigger_touch(@x - 1, (@y + 0.5).to_i) end end #-------------------------------------------------------------------------- # o Move_right_quarter #-------------------------------------------------------------------------- def move_right_quarter(turn_enabled = true) turn_right if pass_right? @x += 0.25 increase_steps else check_event_trigger_touch(@x + 1, (@y + 0.5).to_i) end end #-------------------------------------------------------------------------- # o Move_up_quarter #-------------------------------------------------------------------------- def move_up_quarter(turn_enabled = true) turn_up if pass_up? @y -= 0.25 increase_steps else check_event_trigger_touch((@x + 0.5).to_i, @y - 1) end end #-------------------------------------------------------------------------- # o Move_lower_left_quarter #-------------------------------------------------------------------------- def move_lower_left_quarter turn_lower_left @x -= 0.25 if pass_left? @y += 0.25 if pass_down? increase_steps end #-------------------------------------------------------------------------- # o Move_lower_right_quarter #-------------------------------------------------------------------------- def move_lower_right_quarter turn_lower_right @x += 0.25 if pass_right? @y += 0.25 if pass_down? increase_steps end #-------------------------------------------------------------------------- # o Move_upper_left_quarter #-------------------------------------------------------------------------- def move_upper_left_quarter turn_upper_left @x -= 0.25 if pass_left? @y -= 0.25 if pass_up? increase_steps end #-------------------------------------------------------------------------- # o Move_upper_right_quarter #-------------------------------------------------------------------------- def move_upper_right_quarter turn_upper_right @x += 0.25 if pass_right? @y -= 0.25 if pass_up? increase_steps end end
#============================================================================== # o Numeric #============================================================================== class Numeric #--------------------------------------------------------------- # o Appartenance à un intervalle #--------------------------------------------------------------- def in_between?(a, b) if self >= a and self <= b return true end end #--------------------------------------------------------------- # o Entier supérieur #--------------------------------------------------------------- def int_sup return (self + 0.99).to_i end end |
| | | kreiss Ninja (niveau 5)
Messages postés : 235 Date d'inscription : 05/12/2012 Jauge LPC :
| Sujet: Re: [Résolu]Faire bouger le héros pixel par pixel Mer 8 Avr 2015 - 17:08 | |
| C'est peut-être ce que je cherche au final, mais j'ai un bug ligne 65. |
| | | Zexion Administrateur
Messages postés : 6228 Date d'inscription : 04/01/2012 Jauge LPC :
| Sujet: Re: [Résolu]Faire bouger le héros pixel par pixel Mer 8 Avr 2015 - 17:23 | |
| Effectivement, autant pour moi, il a une dépendance avec un autre script à placer au-dessus de l'autre. - Code:
-
#============================================================================== # o Game_Player #------------------------------------------------------------------------------ # Modification et séparation de l'appui des touches directionnelles #============================================================================== class Game_Player < Game_Character #-------------------------------------------------------------------------- # o Update #-------------------------------------------------------------------------- def update last_moving = moving? unless moving? or $game_system.map_interpreter.running? or @move_route_forcing or $game_temp.message_window_showing update_move_keys end last_real_x = @real_x last_real_y = @real_y super if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y $game_map.scroll_down(@real_y - last_real_y) end if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X $game_map.scroll_left(last_real_x - @real_x) end if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X $game_map.scroll_right(@real_x - last_real_x) end if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y $game_map.scroll_up(last_real_y - @real_y) end unless moving? if last_moving result = check_event_trigger_here([1,2]) if result == false unless $DEBUG and Input.press?(Input::CTRL) if @encounter_count > 0 @encounter_count -= 1 end end end end if Input.trigger?(Input::C) check_event_trigger_here([0]) check_event_trigger_there([0,1,2]) end end end #-------------------------------------------------------------------------- # o Update_move_keys #-------------------------------------------------------------------------- def update_move_keys if $game_system.has_method?("diag_system_on") and $game_system.diag_system_on move_8_directions else move_4_directions end end #-------------------------------------------------------------------------- # o Move_4_directions #-------------------------------------------------------------------------- def move_4_directions case Input.dir4 when 2 move_down when 4 move_left when 6 move_right when 8 move_up end end #-------------------------------------------------------------------------- # o Move_8_directions #-------------------------------------------------------------------------- def move_8_directions case Input.dir8 when 1 move_lower_left when 2 move_down when 3 move_lower_right when 4 move_left when 6 move_right when 7 move_upper_left when 8 move_up when 9 move_upper_right end end end
#============================================================================== # o Object #============================================================================== class Object #-------------------------------------------------------------------------- # o Has_method? #-------------------------------------------------------------------------- def has_method?(method_name) return methods.include?(method_name) end end |
| | | kreiss Ninja (niveau 5)
Messages postés : 235 Date d'inscription : 05/12/2012 Jauge LPC :
| Sujet: Re: [Résolu]Faire bouger le héros pixel par pixel Mer 8 Avr 2015 - 19:23 | |
| Ce n'est pas à 100% ce que j’espérais, mais je ne demande pas mieux. Merci beaucoup Zexion ! ^^ |
| | | Zexion Administrateur
Messages postés : 6228 Date d'inscription : 04/01/2012 Jauge LPC :
| Sujet: Re: [Résolu]Faire bouger le héros pixel par pixel Mer 8 Avr 2015 - 19:24 | |
| Bravo Zexion, je t'ajoute des points. |
| | | Siegfried Mage (niveau 2)
Messages postés : 286 Date d'inscription : 31/07/2011 Jauge LPC :
| Sujet: Re: [Résolu]Faire bouger le héros pixel par pixel Jeu 23 Juil 2015 - 13:34 | |
| Bonjour, je ne pense pas que ce soit du necropost, mais je veux juste signaler qu'en bossant sur mon projet, j'utilise les quarts de pas, et que depuis le temps, j'ai dû refaire plusieurs fois ce script. En gros, pour ceux que ça intéresse, le script tel qu'il est publié sur le net fonctionne, mais il a des imperfections que j'ai résolues depuis. Hélas, je ne publie rien pour le moment parce que je ne peux pas assurer un support permanent ou un suivi des mises à jour, et surtout parce qu'il m'arrive souvent d'y modifier des choses. Ajourd'hui, le script est bien plus court, plus logique et moins "artisanal", il gère les collisions héros/event bien mieux (avec la version que Zexion a postée, normalement, on PEUT traverser un event qui se déplace). [Petit interlude comique] - Zexion a écrit:
- Bravo Zexion, je t'ajoute des points.
Je vais envoyer un MP à Siegfried pour lui signaler des bugs. [Fin du petit interlude comique]Et surtout, j'ai codé des "calques" pour gèrer les passabilités, et réellement se débarrasser des cases 32x32, avec un mini-éditeur (à la souris) in-game (voir le post de présentation de mon projet, il me semble que j'avais mis des screens de cette fonctionnalité). Ah oui, la diagonale et la fonction "courir" sont aussi intégrées. Bref, tout ça pour dire de ne pas désespérer, je publierai bien ce truc un jour, et ce sera bien plus confortable à utiliser. C'est juste que je cherche toujours un moyen de rendre le truc plus simple d'utilisation, et que ça prendra un certain temps. Pour être honnête, il me semblait que quelqu'un avait publié un script de déplacement au pixel, et je pensais mon truc obsolète... |
| | | Contenu sponsorisé
| Sujet: Re: [Résolu]Faire bouger le héros pixel par pixel | |
| |
| | | |
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |