设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: 飞火流萤
打印 上一主题 下一主题

[已经解决] 如何实现蓄力跳跃...

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
338 小时
注册时间
2014-7-15
帖子
593
11
 楼主| 发表于 2014-12-13 16:31:50 | 只看该作者
module Train_Actor
  #是否使用停止跟随的方法,也就是说,这里false改为true的时候,如果      
  #TRANSPARENT_SWITCHES_INDEX
  #开关打开,跟随的人物就消失了(其实只是变成透明而已)
  TRANSPARENT_SWITCH = true
  TRANSPARENT_SWITCHES_INDEX = 20
  #举例:第一个为true,第二个为20,则打开20号开关,后面的人都没了。

  #跟随人数的最大数目,可以更改为2、3什么的。
  TRAIN_ACTOR_SIZE_MAX = 4

  # 定数
  #Input::DOWN = 2
  #Input::LEFT = 4
  #Input::RIGHT = 6
  #Input::UP = 6
  DOWN_LEFT = 1
  DOWN_RIGHT = 3
  UP_LEFT = 7
  UP_RIGHT = 9
  JUMP = 5
  class Game_Party_Actor < Game_Character
    def initialize
      super()
      @through = true
    end
    def setup(actor)
      # キャラクターのファイル名と色相を設定
      if actor != nil
        @character_name = actor.character_name
        @character_hue = actor.character_hue
      else
        @character_name = ""
        @character_hue = 0
      end
      # 不透明度と合成方法を初期化
      @opacity = 255
      @blend_type = 0
    end
    def screen_z(height = 0)
      if $game_player.x == @x and $game_player.y == @y
        return $game_player.screen_z(height) - 1
      end
      super(height)
    end
    #--------------------------------------------------------------------------
    # ● 下に移動
    # turn_enabled : その場での向き変更を許可するフラグ
    #--------------------------------------------------------------------------
    def move_down(turn_enabled = true)
      # 下を向く
      if turn_enabled
        turn_down
      end
      # 通行可能な場合
      if passable?(@x, @y, Input::DOWN)
        # 下を向く
        turn_down
        # 座標を更新
        @y += 1
      end
    end
    #--------------------------------------------------------------------------
    # ● 左に移動
    # turn_enabled : その場での向き変更を許可するフラグ
    #--------------------------------------------------------------------------
    def move_left(turn_enabled = true)
      # 左を向く
      if turn_enabled
        turn_left
      end
      # 通行可能な場合
      if passable?(@x, @y, Input::LEFT)
        # 左を向く
        turn_left
        # 座標を更新
        @x -= 1
      end
    end
    #--------------------------------------------------------------------------
    # ● 右に移動
    # turn_enabled : その場での向き変更を許可するフラグ
    #--------------------------------------------------------------------------
    def move_right(turn_enabled = true)
      # 右を向く
      if turn_enabled
        turn_right
      end
      # 通行可能な場合
      if passable?(@x, @y, Input::RIGHT)
        # 右を向く
        turn_right
        # 座標を更新
        @x += 1
      end
    end
    #--------------------------------------------------------------------------
    # ● 上に移動
    # turn_enabled : その場での向き変更を許可するフラグ
    #--------------------------------------------------------------------------
    def move_up(turn_enabled = true)
      # 上を向く
      if turn_enabled
        turn_up
      end
      # 通行可能な場合
      if passable?(@x, @y, Input::UP)
        # 上を向く
        turn_up
        # 座標を更新
        @y -= 1
      end
    end
    #--------------------------------------------------------------------------
    # ● 左下に移動
    #--------------------------------------------------------------------------
    def move_lower_left
      # 向き固定でない場合
      unless @direction_fix
        # 右向きだった場合は左を、上向きだった場合は下を向く
        @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction)
      end
      # 下→左、左→下 のどちらかのコースが通行可能な場合
      if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
          (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
        # 座標を更新
        @x -= 1
        @y += 1
      end
    end
    #--------------------------------------------------------------------------
    # ● 右下に移動
    #--------------------------------------------------------------------------
    def move_lower_right
      # 向き固定でない場合
      unless @direction_fix
        # 左向きだった場合は右を、上向きだった場合は下を向く
        @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction)
      end
      # 下→右、右→下 のどちらかのコースが通行可能な場合
      if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
          (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
        # 座標を更新
        @x += 1
        @y += 1
      end
    end
    #--------------------------------------------------------------------------
    # ● 左上に移動
    #--------------------------------------------------------------------------
    def move_upper_left
      # 向き固定でない場合
      unless @direction_fix
        # 右向きだった場合は左を、下向きだった場合は上を向く
        @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction)
      end
      # 上→左、左→上 のどちらかのコースが通行可能な場合
      if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
          (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
        # 座標を更新
        @x -= 1
        @y -= 1
      end
    end
    #--------------------------------------------------------------------------
    # ● 右上に移動
    #--------------------------------------------------------------------------
    def move_upper_right
      # 向き固定でない場合
      unless @direction_fix
        # 左向きだった場合は右を、下向きだった場合は上を向く
        @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction)
      end
      # 上→右、右→上 のどちらかのコースが通行可能な場合
      if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
          (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
        # 座標を更新
        @x += 1
        @y -= 1
      end
    end
    attr_writer :move_speed
    attr_writer :step_anime
  end
  module Spriteset_Map_Module
    def setup_actor_character_sprites?
      return @setup_actor_character_sprites_flag != nil
    end
    def setup_actor_character_sprites(characters)
      if !setup_actor_character_sprites?
        index_game_player = 0
        @character_sprites.each_index do |i|
          if @character_sprites[i].character.instance_of?(Game_Player)
            index_game_player = i
            break
          end
        end
        for character in characters.reverse
          @character_sprites.unshift(
            Sprite_Character.new(@viewport1, character)
          )
        end
        @setup_actor_character_sprites_flag = true
      end
    end
  end
  module Scene_Map_Module
    def setup_actor_character_sprites(characters)
      @spriteset.setup_actor_character_sprites(characters)
    end
  end
  module Game_Party_Module
    def set_transparent_actors(transparent)
      @transparent = transparent
    end
    def setup_actor_character_sprites
      if @characters == nil
        @characters = []
        for i in 1 ... TRAIN_ACTOR_SIZE_MAX
          @characters.push(Game_Party_Actor.new)
        end
      end
      for i in 1 ... TRAIN_ACTOR_SIZE_MAX
        @characters[i - 1].setup(actors[i])
      end
      if $scene.class.method_defined?('setup_actor_character_sprites')
        $scene.setup_actor_character_sprites(@characters)
      end
    end
    def update_party_actors
      setup_actor_character_sprites
      transparent = $game_player.transparent
      if transparent == false
        if TRANSPARENT_SWITCH
          transparent = $game_switches[TRANSPARENT_SWITCHES_INDEX]
        end
      end
      for character in @characters
        character.transparent = transparent
        character.move_speed = $game_player.move_speed
        character.step_anime = $game_player.step_anime
        character.update
      end
    end
    def moveto_party_actors( x, y )
      setup_actor_character_sprites
      for character in @characters
        character.moveto( x, y )
      end
      if @move_list == nil
        @move_list = []
      end
      move_list_setup
    end
    def move_party_actors
      if @move_list == nil
        @move_list = []
        move_list_setup
      end
      @move_list.each_index do |i|
        if @characters[i] != nil
          case @move_list[i].type
          when Input::DOWN
            @characters[i].move_down(@move_list[i].args[0])
          when Input::LEFT
            @characters[i].move_left(@move_list[i].args[0])
          when Input::RIGHT
            @characters[i].move_right(@move_list[i].args[0])
          when Input::UP
            @characters[i].move_up(@move_list[i].args[0])
          when DOWN_LEFT
            @characters[i].move_lower_left
          when DOWN_RIGHT
            @characters[i].move_lower_right
          when UP_LEFT
            @characters[i].move_upper_left
          when UP_RIGHT
            @characters[i].move_upper_right
          when JUMP
            @characters[i].jump(@move_list[i].args[0],@move_list[i].args[1])
          end
        end
      end
    end
    class Move_List_Element
      def initialize(type,args)
        @type = type
        @args = args
      end
      def type() return @type end
      def args() return @args end
    end
    def move_list_setup
      for i in 0 .. TRAIN_ACTOR_SIZE_MAX
        @move_list[i] = nil
      end
    end
    def add_move_list(type,*args)
      @move_list.unshift(Move_List_Element.new(type,args)).pop
    end
    def move_down_party_actors(turn_enabled = true)
      move_party_actors
      add_move_list(Input::DOWN,turn_enabled)
    end
    def move_left_party_actors(turn_enabled = true)
      move_party_actors
      add_move_list(Input::LEFT,turn_enabled)
    end
    def move_right_party_actors(turn_enabled = true)
      move_party_actors
      add_move_list(Input::RIGHT,turn_enabled)
    end
    def move_up_party_actors(turn_enabled = true)
      move_party_actors
      add_move_list(Input::UP,turn_enabled)
    end
    def move_lower_left_party_actors
      move_party_actors
      add_move_list(DOWN_LEFT)
    end
    def move_lower_right_party_actors
      move_party_actors
      add_move_list(DOWN_RIGHT)
    end
    def move_upper_left_party_actors
      move_party_actors
      add_move_list(UP_LEFT)
    end
    def move_upper_right_party_actors
      move_party_actors
      add_move_list(UP_RIGHT)
    end
    def jump_party_actors(x_plus, y_plus)
      move_party_actors
      add_move_list(JUMP,x_plus, y_plus)
    end
  end
  module Game_Player_Module
    def update
      $game_party.update_party_actors
      super
    end
    def moveto( x, y )
      $game_party.moveto_party_actors( x, y )
      super( x, y )
    end
    def move_down(turn_enabled = true)
      if passable?(@x, @y, Input::DOWN)
        $game_party.move_down_party_actors(turn_enabled)
      end
      super(turn_enabled)
    end
    def move_left(turn_enabled = true)
      if passable?(@x, @y, Input::LEFT)
        $game_party.move_left_party_actors(turn_enabled)
      end
      super(turn_enabled)
    end
    def move_right(turn_enabled = true)
      if passable?(@x, @y, Input::RIGHT)
        $game_party.move_right_party_actors(turn_enabled)
      end
      super(turn_enabled)
    end
    def move_up(turn_enabled = true)
      if passable?(@x, @y, Input::UP)
        $game_party.move_up_party_actors(turn_enabled)
      end
      super(turn_enabled)
    end
    def move_lower_left
      # 下→左、左→下 のどちらかのコースが通行可能な場合
      if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
          (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
        $game_party.move_lower_left_party_actors
      end
      super
    end
    def move_lower_right
      # 下→右、右→下 のどちらかのコースが通行可能な場合
      if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
          (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
        $game_party.move_lower_right_party_actors
      end
      super
    end
    def move_upper_left
      # 上→左、左→上 のどちらかのコースが通行可能な場合
      if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
          (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
        $game_party.move_upper_left_party_actors
      end
      super
    end
    def move_upper_right
      # 上→右、右→上 のどちらかのコースが通行可能な場合
      if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
          (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
        $game_party.move_upper_right_party_actors
      end
      super
    end
    def jump(x_plus, y_plus)
      # 新しい座標を計算
      new_x = @x + x_plus
      new_y = @y + y_plus
      # 加算値が (0,0) の場合か、ジャンプ先が通行可能な場合
      if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0)
        $game_party.jump_party_actors(x_plus, y_plus)
      end
      super(x_plus, y_plus)
    end
    attr_reader :move_speed
    attr_reader :step_anime
  end
end # module Train_Actor
class Game_Party
  include Train_Actor::Game_Party_Module
end
class Game_Player
  include Train_Actor::Game_Player_Module
end
class Spriteset_Map
  include Train_Actor::Spriteset_Map_Module
end
class Scene_Map
  include Train_Actor::Scene_Map_Module
end

点评

额,前面没有xy这两个值,所以那一条判断永远不会为TRUE  发表于 2014-12-13 19:36
改了,有什么区别吗?  发表于 2014-12-13 17:33
改了的话请回复一下。。。轻度强迫症。  发表于 2014-12-13 16:51
额,那个把 我的脚本中 if x == 0 and y == 0 改成 if x_xz == 0 and y_xz == 0  发表于 2014-12-13 16:41
回复 支持 反对

使用道具 举报

Lv4.逐梦者

【欧皇】

梦石
3
星屑
2066
在线时间
1004 小时
注册时间
2013-8-19
帖子
3486

开拓者

12
发表于 2014-12-20 15:09:43 | 只看该作者

点评

事件貌似也可以,但是bug很多,做到后期我放弃了  发表于 2014-12-20 16:45
Σ( ゚д゚)八方向?这对事件党来说简直是噩梦啊!  发表于 2014-12-20 16:32
和我想要的不太一样,我需要的是原地垂直两连跳,跳跃键+方向键组成的八方向蓄力跳跃  发表于 2014-12-20 16:30
QQ:2223942063
Q群:365819625
贪吃方1.4
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-27 13:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表