Uchiha sasuke Admin
Nombre de messages : 63 Date d'inscription : 21/06/2007
| Sujet: [Mouvement] Script déplacement pixel par pixel Sam 23 Juin - 20:22 | |
| Donc c'est un script de ma création qui marche plus ou moin ^^, il y a quelque bug dans les collisions, on s'arrête avant la fin de la carte d'un côté et on sort un peu de la carte d'un autre ^^ J'ai testé les events, sa marche, touche action, contactes, sa marche comme il faut ^^. La seul chose à changer dedans est la valeur de VIT, qui vaut 0.125 de base (1/8 ) j'ai testé avec 0.25 sa marche aussi mais je n'ai pas testé d'autre valeur.(Conseille: laissé 0.125) Donc voici le script ^^ - Code:
-
class Game_Player < Game_Character VIT = 0.125 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 == (@x+0.5).to_i and event.y == (@y+0.75).to_i and triggers.include?(event.trigger) if not event.jumping? and event.over_trigger? event.start result = true end end end return result end def check_event_trigger_there(triggers) result = false if $game_system.map_interpreter.running? return result end new_x = (@x+0.5 + (@direction == 6 ? 0.5 : @direction == 4 ? -0.5 : 0)).to_i new_y = (@y+0.75 + (@direction == 2 ? 0.5 : @direction == 8 ? -0.5: 0)).to_i 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? and not event.over_trigger? event.start result = true end end end end end return result end 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 if event.x == (x+0.5).to_i and event.y == (y+0.75).to_i 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 def move_down(turn_enabled = true) if turn_enabled turn_down end if passable?(@x, @y, 2) turn_down @y += VIT increase_steps else check_event_trigger_touch(@x, @y+1) end end def move_left(turn_enabled = true) if turn_enabled turn_left end if passable?(@x, @y, 4) turn_left @x -= VIT increase_steps else check_event_trigger_touch(@x-1, @y) end end def move_right(turn_enabled = true) if turn_enabled turn_right end if passable?(@x, @y, 6) turn_right @x +=VIT increase_steps else check_event_trigger_touch(@x+1, @y) end end def move_up(turn_enabled = true) if turn_enabled turn_up end if passable?(@x, @y, 8) turn_up @y -= VIT increase_steps else check_event_trigger_touch(@x, @y-1) end end def passable?(x, y, d) new_x = (x+0.5 + (d == 6 ? 0.5 : d == 4 ? -0.5 : 0)) new_y = (y+0.75 + (d == 2 ? 0.5 : d == 8 ? -0.5 : 0)) unless (new_x >= 0 and new_x <= $game_map.width and new_y >= 0 and new_y <= $game_map.height) return false end new_x = new_x.to_i new_y = new_y.to_i if $DEBUG and Input.press?(Input::CTRL) return true end if @through return true end unless $game_map.passable?((x+0.5).to_i, (y+0.75).to_i, d, self) return false end unless $game_map.passable?(new_x, new_y, 10 - d) return false end for event in $game_map.events.values if event.x == new_x and event.y == new_y unless event.through if self != $game_player return false end if event.character_name != "" return false end end end end return true end end
Vous le mettez audessus de main et c'est bon ^^. | |
|