Username:

Password:


collapse
Who's Online
  • Dot Invités: 8
  • Dot Caché: 0
  • Dot Membres: 0

There aren't any users online.

* Shoutbox
Refresh History
  • kriss: oui.. je dois faire des demandes pour que google refasse des analyse du site afin de "voir" s'il est tjr malveillant
    Dcembre 08, 2011, 22:47:27
  • Leopold: Cool! Mais Firefox me le déclare toujours malveillant...
    Dcembre 08, 2011, 22:30:32
  • kriss: réouverture du forum !
    Dcembre 06, 2011, 00:48:58
  • Fabien: Coucou facto!! Trop bon de repasser ici :)
    Septembre 25, 2011, 18:06:22
  • Krän: aye ! ^^
    Aot 21, 2011, 23:43:29
  • RPG-Man: lol manu
    Aot 20, 2011, 00:24:00
  • RPG-Man: JE SUIS REVENU MOUHAHA
    Aot 20, 2011, 00:22:26
  • Manucyan: Ca dit quoi un ivrogne dans le noir ? "hé... t'es qui là ?" xd
    Mai 07, 2011, 18:11:20
  • Krän: Il est 2h46 et tout est calme ! :)
    Mai 05, 2011, 01:47:01
  • Manucyan: La tronche du bestiaire ? Un pokédex ! xd
    Avril 30, 2011, 21:18:09
  • Manucyan: désolé je pensais que tout le monde connaissait le phénomène du rickroll (cf wikipédia)
    Avril 30, 2011, 14:08:48
  • kriss: ca merite un ban pour ce lien oO
    Avril 30, 2011, 12:29:51
  • RPG-Man: Sale vilain
    Avril 30, 2011, 11:26:31
  • Krän: Never gonna give u up, never gonna let u dooowwwn ...
    Avril 28, 2011, 20:29:20
  • kriss: en effet mais ce n'est pas normal.. il y a un bug que je dois trouver ^^
    Avril 25, 2011, 10:30:16
  • Leopold: Pour la mise à jour, on peut cliquer sur "Refresh" (deux flèches vertes) ou sur "History" (pendule).
    Avril 22, 2011, 21:31:57
  • RPG-Man: Manque plus qu'elle se mette à jour toute seule quand on ajoute un message et c'est le must !
    Avril 21, 2011, 20:29:39
  • RPG-Man: le shootbox CAY LE BIEN
    Avril 21, 2011, 20:29:14
  • kriss: on appel ca une shootbox :p
    Avril 18, 2011, 16:47:13
  • Manucyan: hé mais c'est marrant !
    Avril 17, 2011, 18:03:46

The Factory » ATELIER » OUTILS DE DEVELOPPEMENT » Kits de jeux » Plates-formes mobiles
Pages: [1] 2 3 4
« sujet précédent | | sujet suivant »
Imprimer
Auteur Fil de discussion: Plates-formes mobiles  (Lu 4000 fois)
MGC
Rubyphile, 2xMachiniste :
Factorien
Machiniste
*
Hors ligne Hors ligne

Messages: 131


Voir le profil
Plates-formes mobiles
« le: Mai 07, 2006, 08:54:31 »

Salut !

Voici un script qui peut aider pour la création de plates-formes mobiles, c'est-à-dire pour des éléments qui se meuvent et sur lesquels le personnage peut grimper s’il a besoin de se déplacer tout en se reposant les papattes.

C’est pour faire ça :

Avec le héros pouvant tomber :

Ou encore pourquoi pas une sorte de chariot :

Ou sinon un monte-charge :


Bon il suffit de créer une nouvelle classe au-dessus de Main, appelée comme vous voulez, et d'y coller ce qui suit :

[spoiler]#PFv1, script créé par MGCaladtogel
class Game_Map
  attr_accessor :map
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
class Game_Character
  attr_accessor :surPF
  attr_accessor :numPF
  attr_accessor :x_sol
  attr_accessor :y_sol
  attr_accessor :vers_PF
  #--------------------------------------------------------------------------
  def initialize
    @id = 0
    @x = 0.0
    @y = 0.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
    @surPF = false
    @numPF = 0
    @x_sol = 0
    @y_sol = 0
    @vers_PF = false
  end
  #--------------------------------------------------------------------------
  def passable?(x, y, d)
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    unless $game_map.valid?(new_x, new_y)
      return false
    end
    if @through
      return true
    end
    unless $game_map.passable?(x, y, d, self) or @surPF
      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
    if $game_player.x == new_x and $game_player.y == new_y
      unless $game_player.through
        if @character_name != ""
          return false
        end
      end
    end
    return true
  end
  #--------------------------------------------------------------------------
  def screen_z(height = 0)
    if @always_on_top
      return 999
    end
    z = (@real_y - $game_map.display_y + 3) / 4 + 32
    z += 32 if (@surPF or @vers_PF)
    if @tile_id > 0
      return z + $game_map.priorities[@tile_id] * 32
    else
      return z + ((height > 32) ? 31 : 0)
    end
  end
  #--------------------------------------------------------------------------
  def check_surPF(x, y)
    i = 0
    for event in $game_map.events.values
      if (event.real_x - 63 <= x) and (event.real_x + 63>= x) and (event.real_y - 95 <= y) and
        (event.real_y + 31 >= y) and event.est_PF?
          @surPF = true
          i = event.id
      end
    end
    if i == 0 and !@versPF
      @surPF = false
    end
    return i
  end
  #--------------------------------------------------------------------------
  def check_depl_surPF(x, y)
    for event in $game_map.events.values
      if (event.real_x - 63 <= x) and (event.real_x + 63>= x) and (event.real_y - 95 <= y) and
        (event.real_y + 31 >= y) and event.est_PF?
          return true
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  def check_depl_surPF2(x0,y0,x, y)
    if !@surPF and !$game_map.valid?(x0, y0)
      return false
    end
    for event in $game_map.events.values
      if (event.real_x - 63 <= x) and (event.real_x + 63>= x) and (event.real_y - 95 <= y) and
        (event.real_y + 31 >= y) and event.est_PF?
        return true
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  def check_vide(x, y)
    if $game_map.terrain_tag(x, y) == 1
       return true
    end
    return false
  end
  #--------------------------------------------------------------------------
  def move_down(turn_enabled = true)
    if turn_enabled
      turn_down
    end
    if passable?((@x+0.5).to_i, (@y+0.5).to_i, 2) or
      check_depl_surPF2(@x,@y,@x*128,@y*128+128) or
      $game_map.terrain_tag((@x+0.5).to_i, (@y+0.5).to_i+1) == 1
      turn_down
      if !@surPF
        if check_depl_surPF(@x*128,@y*128+128) or check_vide(@x,@y+1)
          @y_sol = @y
          @x_sol = @x
          @vers_PF = true if check_depl_surPF(@x*128,@y*128+128)
        end
        @y += 1
      elsif !check_depl_surPF(@x*128,@y*128+128)
        @vers_PF = false
        @y = ((@real_y.to_f/128)+0.5).to_i + 1
        @x = ((@real_x.to_f/128)+0.5).to_i
        @move_speed = 4
      else
        @vers_PF = true
        @y += 1.0
        @move_speed = 4
      end
      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+0.5).to_i, (@y+0.5).to_i, 4) or
      check_depl_surPF2(@x*128,@y*128,@x*128-128,@y*128) or
      $game_map.terrain_tag((@x+0.5).to_i-1, (@y+0.5).to_i) == 1
      turn_left
      if !@surPF
        if check_depl_surPF(@x*128-128,@y*128) or check_vide(@x-1,@y)
          @y_sol = @y
          @x_sol = @x
          @vers_PF = true if check_depl_surPF(@x*128-128,@y*128)
        end
        @x -= 1
      elsif !check_depl_surPF(@x*128-128,@y*128)
        @vers_PF = false
        @y = ((@real_y.to_f/128)+0.5).to_i
        @x = ((@real_x.to_f/128)+0.5).to_i - 1
        @move_speed = 4
      else
        @vers_PF = true
        @x -= 1.0
        @move_speed = 4
      end
      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+0.5).to_i, (@y+0.5).to_i, 6) or
      check_depl_surPF2(@x*128,@y*128,@x*128+128,@y*128) or
      $game_map.terrain_tag((@x+0.5).to_i+1, (@y+0.5).to_i) == 1
      turn_right
      if !@surPF
        if check_depl_surPF(@x*128+128,@y*128) or check_vide(@x+1,@y)
          @y_sol = @y
          @x_sol = @x
          @vers_PF = true if check_depl_surPF(@x*128+128,@y*128)
        end
        @x += 1
      elsif !check_depl_surPF(@x*128+128,@y*128)
        @vers_PF = false
        @y = ((@real_y.to_f/128)+0.5).to_i
        @x = ((@real_x.to_f/128)+0.5).to_i + 1
        @move_speed = 4
      else
        @vers_PF = true
        @x+= 1.0
        @move_speed = 4
      end
      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+0.5).to_i, (@y+0.5).to_i, 8) or
      check_depl_surPF2(@x*128,@y*128,@x*128,@y*128-128) or
      $game_map.terrain_tag((@x+0.5).to_i, (@y+0.5).to_i-1) == 1
      turn_up
      if !@surPF
        if check_depl_surPF(@x*128,@y*128-128) or check_vide(@x,@y-1)
          @y_sol = @y
          @x_sol = @x
          @vers_PF = true if check_depl_surPF(@x*128,@y*128-128)
        end
        @y -= 1
      elsif !check_depl_surPF(@x*128,@y*128-128)
        @vers_PF = false
        @y = ((@real_y.to_f/128)+0.5).to_i - 1
        @x = ((@real_x.to_f/128)+0.5).to_i
        @move_speed = 4
      else
        @vers_PF = true
        @y -= 1.0
        @move_speed = 4
      end
      increase_steps
    else
      check_event_trigger_touch(@x, @y-1)
    end
  end
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
class Game_Event < Game_Character
  attr_accessor :temps_pause
  attr_accessor :liste_x
  attr_accessor :liste_y
  attr_accessor :liste_p
  attr_accessor :nom
  attr_accessor :num_phase
  attr_accessor :phase_en_cours
  attr_accessor :x_cible
  attr_accessor :y_cible
  attr_accessor :cmpt_temps
  attr_accessor :PF_active
  attr_accessor :etape_simple
  attr_accessor :aller_simple
  attr_accessor :num_dest_aller_simple
  attr_accessor :boucle_simple
  #--------------------------------------------------------------------------
  def initialize(map_id, event)
    super()
    @map_id = map_id
    @event = event
    @id = @event.id
    @erased = false
    @starting = false
    @through = true
    @temps_pause = 0
    @cmpt_temps = 0
    @liste_x = []
    @liste_y = []
    @liste_p = []
    @num_phase = 0
    @phase_en_cours = false
    @x_cible = 0
    @y_cible = 0
    @nom = $game_map.map.events[@id].name
    if est_PF?
      @move_speed = ""
      val = ""
      liste_caracteres = nom.scan(/./)
      i = liste_caracteres.index("+") + 1
      @etape_simple = false
      @aller_simple = false
      @num_dest_aller_simple = 0
      @boucle_simple = false
      case liste_caracteres
      when "E"
        i+=2
        @etape_simple = true
      when "A"
        i+=1
        while liste_caracteres != "V"
          @num_dest_aller_simple = ""
          @num_dest_aller_simple = @num_dest_aller_simple + liste_caracteres
          i += 1
        end
        @num_dest_aller_simple = @num_dest_aller_simple.to_i
        i+=1
        @aller_simple = true
      when "B"
        i+=2
        @boucle_simple = true
      else
        i+=1
      end
      while liste_caracteres != "/"
        @move_speed = @move_speed + liste_caracteres
        i += 1
      end
      @move_speed = @move_speed.to_i
      i += 1
      while  i < liste_caracteres.length
        if liste_caracteres == "P"
          @temps_pause = ""
          i+=1
          while liste_caracteres != "/" and i < liste_caracteres.length
            @temps_pause = @temps_pause + liste_caracteres
            i += 1
          end
          @temps_pause = @temps_pause.to_i
          i += 1
        else
          @temps_pause = 0
        end
        @liste_p.push(@temps_pause)
        break if i >= liste_caracteres.length
        while liste_caracteres != "_" and i < liste_caracteres.length
          val = val + liste_caracteres
          i += 1
        end
        @liste_x.push(val.to_i)
        val = ""
        i += 1
        while liste_caracteres != "/" and i < liste_caracteres.length
          val = val + liste_caracteres
          i += 1
        end
        @liste_y.push(val.to_i)
        val = ""
        i += 1
      end
      tot = 0
      for nb in @liste_x
        tot = tot + nb
      end
      @liste_x.push(-tot)
      tot = 0
      for nb in @liste_y
        tot = tot + nb
      end
      @liste_y.push(-tot)
      @liste_p.push(0) if @liste_x.length != @liste_p.length
    end
    @temps_pause = @liste_p[1]
    @PF_active = false
    moveto(@event.x, @event.y)
    refresh
  end
  #--------------------------------------------------------------------------
  def est_PF?
    return nom.include?("+")
  end
  #--------------------------------------------------------------------------
  def refresh
    new_page = nil
    unless @erased
      for page in @event.pages.reverse
        c = page.condition
        if c.switch1_valid and !est_PF?
          if $game_switches[c.switch1_id] == false
            next
          end
        end
        if c.switch2_valid and !est_PF?
          if $game_switches[c.switch2_id] == false
            next
          end
        end
        if c.variable_valid and !est_PF?
          if $game_variables[c.variable_id] < c.variable_value
            next
          end
        end
        if c.self_switch_valid and !est_PF?
          key = [@map_id, @event.id, c.self_switch_ch]
          if $game_self_switches[key] != true
            next
          end
        end
        new_page = page
        break
      end
    end
    if new_page == @page
      return
    end
    @page = new_page
    clear_starting
    if @page == nil
      @tile_id = 0
      @character_name = ""
      @character_hue = 0
      @move_type = 0
      @through = true
      @trigger = nil
      @list = nil
      @interpreter = nil
      return
    end
    @tile_id = @page.graphic.tile_id
    @character_name = @page.graphic.character_name
    @character_hue = @page.graphic.character_hue
    if @original_direction != @page.graphic.direction
      @direction = @page.graphic.direction
      @original_direction = @direction
      @prelock_direction = 0
    end
    if @original_pattern != @page.graphic.pattern
      @pattern = @page.graphic.pattern
      @original_pattern = @pattern
    end
    @opacity = @page.graphic.opacity
    @blend_type = @page.graphic.blend_type
    @move_type = @page.move_type
    if !est_PF?
      @move_speed = @page.move_speed
    end
    @move_frequency = @page.move_frequency
    @move_route = @page.move_route
    @move_route_index = 0
    @move_route_forcing = false
    @walk_anime = @page.walk_anime
    @step_anime = @page.step_anime
    @direction_fix = @page.direction_fix
    @through = @page.through
    @always_on_top = @page.always_on_top
    @trigger = @page.trigger
    @list = @page.list
    @interpreter = nil
    if @trigger == 4
      @interpreter = Interpreter.new
    end
    check_event_trigger_auto
  end
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
    if $game_system.map_interpreter.running?
      return
    end
    if @trigger == 2 and @x == ($game_player.x+0.5).to_i and @y == ($game_player.y+0.5).to_i
      if not jumping? and not over_trigger?
        start
      end
    end
  end
  #--------------------------------------------------------------------------
  def check_event_trigger_auto
    if @trigger == 2 and @x == ($game_player.x+0.5).to_i and @y == ($game_player.y+0.5).to_i
      if not jumping? and over_trigger?
        start
      end
    end
    if @trigger == 3
      start
    end
  end
  #--------------------------------------------------------------------------
  def update
    super
    check_event_trigger_auto
    if @interpreter != nil
      unless @interpreter.running?
        @interpreter.setup(@list, @event.id)
      end
      @interpreter.update
    end
    @PF_active = check_active_PF
    if @liste_x != [] and !@phase_en_cours and @PF_active
        @x_cible = @x + @liste_x[@num_phase]
        @y_cible = @y + @liste_y[@num_phase]
        @x += @liste_x[@num_phase]
        @y += @liste_y[@num_phase]
        @phase_en_cours = true
    end
    if @PF_active and @x_cible*128 == @real_x and @y_cible*128 == @real_y
      if @temps_pause != 0 and @cmpt_temps != @temps_pause
        @cmpt_temps += 1
      else
        @phase_en_cours = false
        @cmpt_temps = 0
        @num_phase += 1
        @num_phase = 0 if @num_phase == @liste_x.length
        @temps_pause = @liste_p[0]
        @temps_pause = @liste_p[@num_phase+1]  if @num_phase < (@liste_x.length) - 1
        if @etape_simple
          desactiver_PF
          @PF_active = false
        end
        if @aller_simple and (@num_phase == @num_dest_aller_simple or @num_phase == 0)
          desactiver_PF
          @PF_active = false
        end
        if @boucle_simple and @num_phase == 0
          desactiver_PF
          @PF_active = false
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def screen_z(height = 0)
      z = super()
      if est_PF?
        z += 32
      end
      return z
    end
    #--------------------------------------------------------------------------
    def check_active_PF
      unless @erased
        page = @event.pages[0]
        c = page.condition
        if c.switch1_valid
          if $game_switches[c.switch1_id] == false
            return false
          end
        end
        if c.switch2_valid
          if $game_switches[c.switch2_id] == false
            return false
          end
        end
        if c.variable_valid
          if $game_variables[c.variable_id] < c.variable_value
            return false
          end
        end
        if c.self_switch_valid
          key = [@map_id, @event.id, c.self_switch_ch]
          if $game_self_switches[key] != true
            return false
          end
        end
        return true
      end
    end
    #--------------------------------------------------------------------------   
    def desactiver_PF
      unless @erased
        page = @event.pages[0]
        c = page.condition
        if c.switch1_valid
          if $game_switches[c.switch1_id]
            $game_switches[c.switch1_id] = false
          end
        end
        if c.switch2_valid
          if $game_switches[c.switch2_id]
            $game_switches[c.switch2_id] = false
          end
        end
        if c.variable_valid
          if $game_variables[c.variable_id] >= c.variable_value
            $game_variables[c.variable_id] = 0
          end
        end
        if c.self_switch_valid
          key = [@map_id, @event.id, c.self_switch_ch]
          if $game_self_switches[key]
              $game_self_switches[key] = false
          end
        end
      end
    end
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
class Game_Player < Game_Character
  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.5).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).to_i + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
    new_y = (@y+0.5).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.to_i 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.5).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 update
    @numPF= check_surPF(@real_x,@real_y)
    if @surPF and $game_map.events[@numPF].PF_active
      distance = 2 ** $game_map.events[@numPF].move_speed
      distance_x = @real_x - $game_map.events[@numPF].real_x
      distance_y = @real_y - $game_map.events[@numPF].real_y
      if $game_map.events[@numPF].y_cible * 128  + distance_y > @real_y
        @real_y = [@real_y + distance, $game_map.events[@numPF].y_cible * 128+distance_y].min
        @y = [(@y + distance.to_f/128), $game_map.events[@numPF].y_cible+distance_y.to_f/128].min
      end
      if $game_map.events[@numPF].x_cible * 128 + distance_x < @real_x
        @real_x = [@real_x - distance, $game_map.events[@numPF].x_cible * 128+distance_x].max
        @x = [(@x - distance.to_f/128), $game_map.events[@numPF].x_cible+distance_x.to_f/128].max
      end
      if $game_map.events[@numPF].x_cible* 128 + distance_x > @real_x
        @real_x = [@real_x + distance, $game_map.events[@numPF].x_cible* 128+distance_x].min
        @x = [(@x + distance.to_f/128), $game_map.events[@numPF].x_cible+distance_x.to_f/128].min
      end
      if $game_map.events[@numPF].y_cible * 128 + distance_y < @real_y
        @real_y = [@real_y - distance, $game_map.events[@numPF].y_cible * 128+distance_y].max
        @y = [(@y - distance.to_f/128), $game_map.events[@numPF].y_cible+distance_y.to_f/128].max
      end
    else @x = ((@x+0.5).to_i).to_f if (!@vers_PF and moving?)
      @y = ((@y+0.5).to_i).to_f if (!@vers_PF and moving?)
      if !moving? and !@surPF and !check_vide(@x,@y)
      @x_sol = @x
      @y_sol = @y
      end
      if check_vide(@x,@y) and ((!@vers_PF and moving?) or (!moving? and !@surPF))
        $game_switches[10] = true
        $game_variables[2] = @x_sol
        $game_variables[3] = @y_sol
      end
    end
    last_moving = moving?
    unless moving? or $game_system.map_interpreter.running? or
           @move_route_forcing or $game_temp.message_window_showing
      case Input.dir4
      when 2
        move_down
      when 4
        move_left
      when 6
        move_right
      when 8
        move_up
      end
    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
end[/spoiler]

« Dernière édition: Mai 09, 2006, 11:23:34 par MGCaladtogel » Journalisée
MGC
Rubyphile, 2xMachiniste :
Factorien
Machiniste
*
Hors ligne Hors ligne

Messages: 131


Voir le profil
Re: Plates-formes mobiles
« Répondre #1 le: Mai 07, 2006, 08:55:16 »

Mode d’emploi

I Créer une plate-forme

Créer un évènement à l’endroit de départ de la plate-forme
Choisissez votre image . ATTENTION : ça doit être du 32*32 pixels.
Pour des plates-formes plus grandes, il suffit juste d’en mettre plusieurs côte-à-côte qui suivent les mêmes trajectoires.
Activer le mode fantôme
Après toutes les informations doivent être rajoutées dans le nom.

Tout d’abord, après EV***, ajouter un « + » qui indiquera que c’est une plate-forme
Ensuite ajouter « V » et le nombre représentant la vitesse de déplacement souhaitée : de 1 (lent) à 4 (rapide) ou plus mais je n’ai pas testé.
Ajouter une barre de séparation « / »
Rentrer ensuite les déplacements qui donnent les différents points de passage sous la forme :
Déplacement x + « _ » + Déplacement y
Et mettre « / » entre deux déplacements.
Exemple
EV001+V2/0_3/-2_8
A partir de sa position d’origine, la plate-forme se déplacera de 3 cases vers le bas, puis de 2 cases vers la gauche et 8 cases vers le bas, et ensuite reviendra à sa position de départ pour recommencer la boucle, tout ça à vitesse 2.

Pour ajouter des temps d’attente à chaque point de passage :
Après les données de déplacement, mettre « /P » + le temps d’attente souhaité en frames
Pour la position initiale, l’insérer avant le premier déplacement.
Exemple
EV001+V3/P30/-2_-3/5_-9/P10/1_0/P50
La plate-forme attendra 30 frames sur son point de départ, n’attendra pas sur son deuxième point, attendra 10 frames sur son troisième et 50 frames son son quatrième.

Activation de la plate-forme :
La plate-forme peut être activée (se met en mouvement) ou désactivée par des interrupteurs, variables, ou interrupteurs locaux et ceci se fait via la fenêtre « conditions de l’évenement ».
Lors d’une désactivation, la plate-forme s’arrête une fois parvenue à son prochain point de passage.
Par défaut, quand rien n’est coché dans « conditions de l’évenement », la plate-forme est automatiquement en mouvement (activée).


Pour que la plate-forme s’active lorsque le héros monte dessus :
Dans la fenêtre « condition de déclenchement », cocher « Au contact du héros » et ajouter le commande d’activation dans la fenêtre « commandes de l’évènement ».
Pour que la plate-forme reste activée tant que héros est dessus (a son utilité avec les modes de déplacements E/A/B expliqués après) :
Dans la fenêtre « condition de déclenchement », cocher « Contact Evènement/Héros » et ajouter le commande d’activation dans la fenêtre « commandes de l’évènement » (oh le joli copier/coller !)


Les différents modes de déplacement :
Par défaut une fois la plate-forme activée celle-ci va effectuer ses déplacements en boucle.
Il y a d’autres modes :
Par étape : la plate-forme, une fois activée, effectue son prochain déplacement puis se désactive toute seule.
Si la condition que la plate-forme reste activée tant que héros est dessus a été choisie, la plate-forme continuera ses déplacements et dès que le héros n’est plus dessus, se désactivera au terme de son déplacement.
Pour indiquer ce mode, devant le « V » pour la vitesse dans le nom, il faut rajouter « E ».

Exemple :
EV001+EV1/P5/-2_0

Par aller simple : on considère qu’il y a deux points principaux, celui de départ et un autre dont on relève le numéro. Si c’est le troisième point après le point de départ, il faut retenir « 3 ».
La plate-forme va effectuer ses déplacements et se désactivera une fois arrivée au deuxième point principal. Une fois réactivée, elle finira ses déplacements pour retourner à son point de départ et à nouveau se désactiver.
Devant le « V » dans le nom, il faut rajouter « A » et le numéro relevé.

Exemple :
EV001+A3V3/-2_0/P20/0_2/2_3/4_-1
Une fois qu’elle aura fait son déplacement de 2 cases vers la droite et 3 vers le bas, la plate-forme se désactivera.

Par boucle : la plate-forme fera ses déplacements une fois activée et se désactivera une fois revenue à son point de départ.
Devant le « V » rajouter « B »

Exemple :
EV001+BV2/-2_0/P20

II Gérer le vide

Bon alors tout d’abord il faut aller dans la gestion des chipsets et rendre le vide praticable et avec les 4 sens de déplacement.


Ensuite lui attribuer le numéro de terrain « 1 ».
Pour prendre un autre numéro, il faut changer dans les scripts :
Dans Game_Character 3, dans chaque méthode « def move_*** », remplacer la valeur 1 des 4 lignes du genre $game_map.terrain_tag((@x+0.5).to_i, (@y+0.5).to_i+1) == 1.
Dans Game_Character 2, dans la méthode « def check_vide », il faut également changer le 1.

Pour pouvoir mettre des ponts au-dessus du vide sans que le héros ne passe au travers, il faut aussi attribuer un numéro différents de 0 et de celui du vide, quelconque.



Vers la ligne 240 du script Game_Player, dans « def update », il devrait y avoir ça :
Code:
    if check_vide(@x,@y) and ((!@vers_PF and moving?) or (!moving? and !@surPF))
        $game_switches[10] = true
        $game_variables[2] = @x_sol
        $game_variables[3] = @y_sol
      end

Ce sont les variables réquisitionnées par le script. Vous pouvez choisir ici les numéros de l’interrupteur et des deux variables à utiliser.
L’interrupteur est activé quand le héros tombe.
Les deux variables sont respectivement les coordonnées x et y du dernier endroit « sûr » où est passé le héros.

Après il suffit tout simplement de créer un évènement commun activé par l’interrupteur qui indique ce qui se passe quand le héros est sensé tomber. A vous de voir ! Peut-être va-t-il être récupéré par une soucoupe volante qui passait par là et être emmené sur une autre planète, ou peut-être est-ce le game over (là c’est méchant) ?

Pour mes tests j’ai fait une petite animation avec Arshes qui gesticule, puis j’ai tout simplement mis un message pour décrire la scène, et j’ai téléporté Arshes au dernier endroit sûr (en le faisant clignoter un peu, parce que ça se fait souvent dans les jeux).



Voilà.
Prévenez moi s’il y a des bogues ou des améliorations possibles.
Journalisée
Fabien
Architecte
Savant
*
Hors ligne Hors ligne

Messages: 1372


Scribouillard malade du virus RpgMaking

fabien_35@hotmail.com
Voir le profil Courriel
Re: Plates-formes mobiles
« Répondre #2 le: Mai 07, 2006, 09:21:30 »

ca a de la geule. Tu es un scripteur spécialisé dans les maps ma parole!
Au niveau du code , je n'ai pas le courage de lire vu que c'est long, fragmenté et mélé au systèmes RM, mais ce doti être assez complet vu les possibilités que tu proposes.
Par contre au niveau de la finalisation il y a encore du chemin à faire, EV001+V3/P30/-2_-3/5_-9/P10/1_0/P50 c'est vraiment un truc à faire peur:) Je pense que le script est un peu compliqué d'utilisation... Tu as fait un éffort pour tout expliquer en image, je le vois bien, mais si le script n'est plus pas simple d'utilisaiton je ne pense pas que beaucoup s'en servent. Il eut fallu que l'on ait que à regler les id terrain, mettre une mention simple dans le nom de l'évent ( un seul mot quoi ) et ensuite faire se déplacer la plate forme avec les trucs normaux, genre chemin prédéfini. Evidement c plus dur:)

enfin bon, c super de voir des scripts traitant de la map, on n'avait pas de scripteur dans ce domaine:)
Journalisée

Atom
Savant
*
Hors ligne Hors ligne

Messages: 1357


insécable ou presque


Voir le profil WWW Courriel
Re: Plates-formes mobiles
« Répondre #3 le: Mai 07, 2006, 10:31:12 »

Moi j'ai testé mais ça fonctionne pas (on passe au travers des plates-formes et on marche au dessus du vide).
C'est surement du à mon script de déplacement par pixel, mais j'aimerais bien une démo pour voir si je ne me suis pas simplement trompé ^^'
C'est dommage, il a l'air génial ce script  bienjoue
Journalisée

Portfolio
Blog
MGC
Rubyphile, 2xMachiniste :
Factorien
Machiniste
*
Hors ligne Hors ligne

Messages: 131


Voir le profil
Re: Plates-formes mobiles
« Répondre #4 le: Mai 07, 2006, 10:37:04 »

C'est vrai que ce script est pas mal basé sur le déplacement, il doit y avoir incompatibilité...
Si tu veux tester, il suffit d'ouvrir un nouveau projet et d'effectuer les changements je pense.
Journalisée
Atom
Savant
*
Hors ligne Hors ligne

Messages: 1357


insécable ou presque


Voir le profil WWW Courriel
Re: Plates-formes mobiles
« Répondre #5 le: Mai 07, 2006, 11:24:56 »

Oui mais vu le nombre de choses à faire, je pense qu'une démo serais la bienvenue ^^
Si j'ai fait une erreure, je la referais surement dans un nouveau projet (et j'ai la flemme de tout recommencer aujourd'hui XD)
Journalisée

Portfolio
Blog
BaLiL
Chef de projet, scenariste etc... de "Fairy's Land: Les 3 rois Chat"
Machiniste
*
Hors ligne Hors ligne

Messages: 283


Drogu? au jus d'orange

demande+la+moi+par+MP
Voir le profil WWW Courriel
Re: Plates-formes mobiles
« Répondre #6 le: Mai 07, 2006, 15:02:15 »

Trop cool en plus j'en avait besoin de se script encore merci !!!
mais comme l'a dis Atom, se serai moin compliqué avec une demo !!!
« Dernière édition: Mai 07, 2006, 15:19:03 par BaLiL » Journalisée


The Factory... Forum natale ><....
JojoKing24
Chef des Plantes Musicales
Technicien
*
Hors ligne Hors ligne

Messages: 593


Tremblez face au Grand Pouvoir des Plantes Vertes!

jojoking24@hotmail.com
Voir le profil Courriel
Re: Plates-formes mobiles
« Répondre #7 le: Mai 07, 2006, 16:27:38 »

Pour ceux qui aiment l'idée mais trouve ça un peu complexe, ya possibilité de faire semblable avec simplement des events.

La plateforme est un event sur un terrain praticable, sans le mode fantôme, donc non praticable, et avec un interrupteur on change de page ( et possiblement de visuel ) et voilà on active le mode fantôme, donc il est praticable. (Simple? Ouais!)

Évidamment pour les déplacements c'est plus complexe ( mais encore faisable tant que l'évènement ne bouge pas de lui-même ) et pour les trucs à grande échelle bah on a le lag à cause des évènements.
Journalisée



(\__/)  Voici Lapin. Copiez et collez Lapin dans votre signature
(='.'=) pour l'aider à promouvoir sa domination du monde.
(")_(") Il est de retour à l'école. Allez travaille, feignasse!
MGC
Rubyphile, 2xMachiniste :
Factorien
Machiniste
*
Hors ligne Hors ligne

Messages: 131


Voir le profil
Re: Plates-formes mobiles
« Répondre #8 le: Mai 07, 2006, 16:43:53 »

Bon bah voici un lien où vous pourrez trouver mon projet (en espérant que cela marche) :
http://rapidshare.de/files/19858096/Projet_PlatesFormes.exe.html

Quand j'aurai le temps, je vais essayer de rendre le script plus simple d'utilisation.
Journalisée
Atom
Savant
*
Hors ligne Hors ligne

Messages: 1357


insécable ou presque


Voir le profil WWW Courriel
Re: Plates-formes mobiles
« Répondre #9 le: Mai 07, 2006, 17:47:35 »

Merci pour la démo, j'essairais de voir si elle peu m'éclairer ^^
Journalisée

Portfolio
Blog
kriss
Architecte
Savant
*
Hors ligne Hors ligne

Messages: 4447


Don Quichotte de l'orthographe

krisss666@msn.com
Voir le profil Courriel
Re: Plates-formes mobiles
« Répondre #10 le: Mai 08, 2006, 23:24:48 »

Puisque tu as fait l'effort de faire une demo je ne peux pas ne pas la tester ^^.
Je trouve le systeme bien construit mais j'ai décelé plusieurs points qui peuvent empecher l'utilisation de ta methode dans un jeu.
Bon je suis mort AU MOINS 20x (ok je suis pas le plus doué mais bon):
- Il y a un bug avec la 1ere plate forme, quand on veut descendre pres de l'arbre, il m'est arrivé de tomber et de réapparaitre à l'endroit où je suis tombé et non pas comme tu l'as prévu, sur le bord d'un terrain ...
- parfois il faut bien "viser" pour arriver à aller sur une planche : je pense que la marge d'erreur est trop faible (dans la plupart des jeux de plate forme, le hero arrive à se rattrapper quand il est proche de la plate forme sans etre vraiment dessus (tu pourrais faire un déplacement automatique d'un pas vers la planche si tu detecte que le hero n'est pas sur celle ci mais tres proche ^^)
- il faudrait inserer le "saut" du hero (bon je sais c'est un peu HS vu qu'on parle des plateforme et non pas du hero, mais dans un systeme comme celui la, je pense que c'est necessaire donc tant qu'à faire il faudrait le prévoir dés le départ).

Voila test fini
je trouve l'application excellente pour de futurs projets
Journalisée

La plus vieille et la plus forte des émotions humaines est la peur, et la plus vieille et la plus forte peur est celle de l'inconnue
- H.P LOVECRAFT -
Projet en cours: MONOLITHE
http://rpgmakerxp-factory.net/forum/index.php?topic=10561.0
MGC
Rubyphile, 2xMachiniste :
Factorien
Machiniste
*
Hors ligne Hors ligne

Messages: 131


Voir le profil
Re: Plates-formes mobiles
« Répondre #11 le: Mai 09, 2006, 11:34:17 »

Merci pour les remarques constructives.
- Je n'arrive pas à obtenir le bogue de la première plate-forme, as-tu effectué quelque chose de spécial sur celle-là ?
- pour la difficulté à atteindre les plates-formes, je vais voir ce que je peux faire.
- c'est vrai que maintenant que tu as fait la remarque, un système de saut est nécessaire. Seulement il faudrait faire des sauts qui ne soient pas en déplacement case par case pour qu'il y ait un réel intérêt.
Et donc il faudrait que même sur du sol normal, le déplacement ne soit pas case par case.

Sinon j'ai édité le premier message pour que le script (non encore modifié) soit plus facilement installable.
Journalisée
kriss
Architecte
Savant
*
Hors ligne Hors ligne

Messages: 4447


Don Quichotte de l'orthographe

krisss666@msn.com
Voir le profil Courriel
Re: Plates-formes mobiles
« Répondre #12 le: Mai 09, 2006, 12:29:05 »

- Pour le 1er bogue, j'ai suis tout simplement descendu trop tard (la plate forme remontait), mais je n'ai eu le bogue qu'une fois.
- Pour le deplacement non case par case, il existe un script sur ce forum avec le deplacemnt 8 directions inclu (si tu ne le trouve pas je ferais une recherche et posterais le lien).

Au fait chez moi la demo laggait un peu mais j'ai des soucis de pc en ce moment (athlon 2400+ et 1go de ram, 6600gt en 128mo) , donc je retesterais sur une autre machine.
Journalisée

La plus vieille et la plus forte des émotions humaines est la peur, et la plus vieille et la plus forte peur est celle de l'inconnue
- H.P LOVECRAFT -
Projet en cours: MONOLITHE
http://rpgmakerxp-factory.net/forum/index.php?topic=10561.0
MGC
Rubyphile, 2xMachiniste :
Factorien
Machiniste
*
Hors ligne Hors ligne

Messages: 131


Voir le profil
Re: Plates-formes mobiles
« Répondre #13 le: Mai 09, 2006, 12:50:13 »

C'est bon, j'ai trouvé le script (il faut dire que le forum est bien organisé).
C'est étonnant que la démo lag sur ton pc car il est pourtant apparemment plus puissant que le mien...
Journalisée
BaLiL
Chef de projet, scenariste etc... de "Fairy's Land: Les 3 rois Chat"
Machiniste
*
Hors ligne Hors ligne

Messages: 283


Drogu? au jus d'orange

demande+la+moi+par+MP
Voir le profil WWW Courriel
Re: Plates-formes mobiles
« Répondre #14 le: Mai 10, 2006, 13:34:01 »

moi j'ai eu un bug ou le héro revenait dans le vide se qui fait qu'il n'arretait pas de tombé !!!
Journalisée


The Factory... Forum natale ><....
Pages: [1] 2 3 4
Imprimer
« sujet précédent | | sujet suivant »
Aller à:  


Powered by SMF 1.1.15 | SMF © 2006-2009, Simple Machines

EN Theme by Nati

Page générée en 0.163 secondes avec 26 requêtes.
Chargement...
SimplePortal 2.3.2 © 2008-2010, SimplePortal