Ergebnis 1 bis 4 von 4

Thema: Zelda Scroll und Pixelmovement - Skripte mergen?

  1. #1

    Zelda Scroll und Pixelmovement - Skripte mergen?

    Hi!

    Wie kann ich zwei unterschiedliche Skripte verwenden, wenn diese die gleichen Variable benutzen müssen? Ich bin Neu-Einsteiger in Skripte schreiben und habe angefangen Ruby zu lernen. Am Besten füge ich die beiden Skripte hier ein:

    Code:
    #==============================================================================
    # ¡ Zelda-Style Map Scrolling
    #------------------------------------------------------------------------------
    # Script by Minkoff
    #==============================================================================
    class New_Game_Player < Game_Character
     #--------------------------------------------------------------------------
     # œ Update
     #--------------------------------------------------------------------------
     def update
       last_moving = moving?
       unless moving? or $game_system.map_interpreter.running? or
              @move_route_forcing or $game_temp.message_window_showing or @disable_input
         case Input.dir4
         when 2
           move_down
         when 4
           move_left
         when 6
           move_right
         when 8
           move_up
         end
       end
       super
       #------------------------------------------------------------------------
       if @direction == 6 and # Player Facing Right
       @real_x % 2560 == 0 and
       @real_x > $game_map.display_x and
       $game_map.display_x != @last_display_x
         @last_display_x = $game_map.display_x
         $game_map.scroll_right(128)
         @disable_input = true
       elsif @direction == 4 and # Player Facing Left
       @real_x % (2560 - 128) == 0 and
       ($game_map.display_x - @real_x).abs < (2560 - 128) and
       $game_map.display_x != @last_display_x
         @last_display_x = $game_map.display_x
         $game_map.scroll_left(128)
         @disable_input = true
       elsif @direction == 2 and # Player Facing Down
       @real_y % 1920 == 0 and
       @real_y > $game_map.display_y and
       $game_map.display_y != @last_display_y
         @last_display_y = $game_map.display_y
         $game_map.scroll_down(128)
         @disable_input = true
       elsif @direction == 8 and # Player Facing Up
       @real_y % (1920 - 128) == 0 and
       ($game_map.display_y - @real_y).abs < (1920 - 128) and
       $game_map.display_y != @last_display_y
         @last_display_y = $game_map.display_y
         $game_map.scroll_up(128)
         @disable_input = true
       else
         @disable_input = false
         @last_display_x = nil
         @last_display_y = nil
       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
    Code:
    # http://members.jcom.home.ne.jp/cogwheel/
    #==============================================================================
    # Game_Player
    #==============================================================================
    class Game_Player < Game_Character
    UP      = 0
    DOWN  = 0
    SIDE  = 0
    SLANT = false
    #--------------------------------------------------------------------------
    attr_reader   :event
    attr_accessor :move_speed
    #--------------------------------------------------------------------------
    alias :update_original :update
    def update
      @walk  = 4
      @dash  = 5
      @event = 4
      @dot_m = true
      unless moving? or $game_system.map_interpreter.running? or
                      @move_route_forcing or $game_temp.message_window_showing
            if @walk != @dash
              if Input.press?(Input::C)
                    if @move_speed != @dash
                      @move_speed = @dash
                    end
              else
                    if @move_speed != @walk
                      @move_speed = @walk
                    end
              end
            end
      end
      if @revise_x == nil and @revise_y == nil
            @revise_x = 0
            @revise_y = 0
      end
      unless @dot_m
            update_original
            return
      end
      if @move_route_forcing
            last_moving = moving?
            last_real_x = @real_x
            last_real_y = @real_y
            if (@revise_x != 0 or @revise_y != 0) and not jumping? and @move == true
              if @revise_x != @real_x - @x * 128 or @revise_y != @real_y - @y * 128
                    @revise_x = @real_x - @x * 128
                    @revise_y = @real_y - @y * 128
              end
              distance1 = 2 ** @move_speed
              distance2 = Math.sqrt(@revise_x ** 2 + @revise_y ** 2)
              if distance1 > distance2
                    @real_x = @real_x - @revise_x
                    @real_y = @real_y - @revise_y
                    @revise_x = 0
                    @revise_y = 0
                    anime_update
              else
                    @real_x -= (distance1 * @revise_x / distance2).round
                    @real_y -= (distance1 * @revise_y / distance2).round
                    @revise_x = @real_x - @x * 128
                    @revise_y = @real_y - @y * 128
                    anime_update
              end
            else
              super
            end
      else
            @move = false
            unless moving? or $game_system.map_interpreter.running? or
                       @move_route_forcing or $game_temp.message_window_showing
              @event_run = false
              case Input.dir8
              when 1
                    move_lower_left_p
              when 2
                    move_down_p
              when 3
                    move_lower_right_p
              when 4
                    move_left_p
              when 6
                    move_right_p
              when 7
                    move_upper_left_p
              when 8
                    move_up_p
              when 9
                    move_upper_right_p
              end
            end
            last_real_x = @real_x
            last_real_y = @real_y
            @real_x = @x * 128 + @revise_x
            @real_y = @y * 128 + @revise_y
            last_moving = moving?
            move_on
            if (last_real_x != @real_x or last_real_y != @real_y)
              @move_distance = 0 if @move_distance == nil
              @move_distance += Math.sqrt((last_real_x - @real_x) ** 2 +
                                                                            (last_real_y - @real_y) ** 2)
              if @move_distance >= 128
                    @move_distance %= 128
                    increase_steps
              end
              anime_update
            else
              @pattern = 0
            end
      end
      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
      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
    #--------------------------------------------------------------------------
    def initialize
      @revise_x = 0
      @revise_y = 0
      @move == false
      super
    end
    #--------------------------------------------------------------------------
    def moving?
      unless @dot_m
            result = super
            return result
      end
      if @move_route_forcing
            if @move == false
              return false
            end
            super
      else
            return (@x != (@real_x / 128.0).round or @y != (@real_y / 128.0).round)
      end
    end
    #--------------------------------------------------------------------------
    def moving_a?
      if @move == false
            if (@move_route.list[@move_route_index].code <= 14 or
                    @move_route.list[@move_route_index].code == 25)
              @move = true
            end
            return false
      end
      moving?
    end
    #--------------------------------------------------------------------------
    def update_jump
      @jump_count -= 1
      @real_x = (@real_x * @jump_count + @x * 128) / (@jump_count + 1)
      @real_y = (@real_y * @jump_count + @y * 128) / (@jump_count + 1)
      if @jump_count == 0
            @revise_x = 0
            @revise_y = 0
      end
    end
    #--------------------------------------------------------------------------
    def move_type_custom
      unless @dot_m
            super
            return
      end
      if jumping? or moving_a?
            return
      end
      while @move_route_index < @move_route.list.size
            command = @move_route.list[@move_route_index]
            if command.code == 0
              if @move_route.repeat
                    @move_route_index = 0
              end
              unless @move_route.repeat
                    if @move_route_forcing and not @move_route.repeat
                      @move_route_forcing = false
                      @move_route = @original_move_route
                      @move_route_index = @original_move_route_index
                      @original_move_route = nil
                    end
                    @stop_count = 0
              end
              return
            end
            if command.code <= 14
              case command.code
              when 1
                    move_down
              when 2
                    move_left
              when 3
                    move_right
              when 4
                    move_up
              when 5
                    move_lower_left
              when 6
                    move_lower_right
              when 7
                    move_upper_left
              when 8
                    move_upper_right
              when 9
                    move_random
              when 10
                    move_toward_player
              when 11
                    move_away_from_player
              when 12
                    move_forward
              when 13
                    move_backward
              when 14
                    jump(command.parameters[0], command.parameters[1])
              end
              if not @move_route.skippable and not moving? and not jumping?
                    return
              end
              @move_route_index += 1
              return
            end
            if command.code == 15
              @wait_count = command.parameters[0] * 2 - 1
              @move_route_index += 1
              return
            end
            if command.code >= 16 and command.code <= 26
              case command.code
              when 16
                    turn_down
              when 17
                    turn_left
              when 18
                    turn_right
              when 19
                    turn_up
              when 20
                    turn_right_90
              when 21
                    turn_left_90
              when 22
                    turn_180
              when 23
                    turn_right_or_left_90
              when 24
                    turn_random
              when 25
                    turn_toward_player
              when 26
                    turn_away_from_player
              end
              @move_route_index += 1
              return
            end
            if command.code >= 27
              case command.code
              when 27
                    $game_switches[command.parameters[0]] = true
                    $game_map.need_refresh = true
              when 28
                    $game_switches[command.parameters[0]] = false
                    $game_map.need_refresh = true
              when 29
                    @move_speed = command.parameters[0]
              when 30
                    @move_frequency = command.parameters[0]
              when 31
                    @walk_anime = true
              when 32
                    @walk_anime = false
              when 33
                    @step_anime = true
              when 34
                    @step_anime = false
              when 35
                    @direction_fix = true
              when 36
                    @direction_fix = false
              when 37
                    @through = true
              when 38
                    @through = false
              when 39
                    @always_on_top = true
              when 40
                    @always_on_top = false
              when 41
                    @tile_id = 0
                    @character_name = command.parameters[0]
                    @character_hue = command.parameters[1]
                    if @original_direction != command.parameters[2]
                      @direction = command.parameters[2]
                      @original_direction = @direction
                      @prelock_direction = 0
                    end
                    if @original_pattern != command.parameters[3]
                      @pattern = command.parameters[3]
                      @original_pattern = @pattern
                    end
              when 42
                    @opacity = command.parameters[0]
              when 43
                    @blend_type = command.parameters[0]
              when 44
                    $game_system.se_play(command.parameters[0])
              when 45
                    result = eval(command.parameters[0])
              end
              @move_route_index += 1
              return
            end
      end
    end
    #--------------------------------------------------------------------------
    def move_down_p
      turn_down
      distance = 2 ** @move_speed
      down1(((@x * 128 + @revise_x) / 128.0).round,
                    ((@y * 128 + @revise_y) / 128.0).round, distance, true)
    end
    #--------------------------------------------------------------------------
    def down1(x, y, distance, down = false)
      result = down2(x, y, distance)
      if result == false
            @event_run = check_event_trigger_touch(x, y+1)
            return result
      end
      if @revise_x < -SIDE
            result = down2(x, y + 1, distance, 4)
            result &= down2(x - 1, y, distance)
            if result == false
              if down
                    move_lower_right_p
                    if @revise_x > SIDE
                      @revise_x = SIDE
                    end
              end
              return result
            end
      elsif @revise_x > SIDE
            result = down2(x, y + 1, distance, 6)
            result &= down2(x + 1, y, distance)
            if result == false
              if down
                    move_lower_left_p
                    if @revise_x < -SIDE
                      @revise_x = -SIDE
                    end
              end
              return result
            end
      end
      @revise_y += distance
      return result
    end
    #--------------------------------------------------------------------------
    def down2(x, y, distance, d = 2)
      if @revise_y + distance > DOWN
            unless passable?(x, y, d)
              if @revise_y < DOWN
                    @revise_y = DOWN
              end
              return false
            end
      end
      return true
    end
    #--------------------------------------------------------------------------
    def move_left_p
      turn_left
      distance = 2 ** @move_speed
      left1(((@x * 128 + @revise_x) / 128.0).round,
                    ((@y * 128 + @revise_y) / 128.0).round, distance, true)
    end
    #--------------------------------------------------------------------------
    def left1(x, y, distance, left = false)
      result = left2(x, y, distance)
      if result == false
            @event_run = check_event_trigger_touch(x-1, y)
            return result
      end
      if @revise_y < -UP
            result = left2(x - 1, y, distance, 8)
            result &= left2(x, y - 1, distance)
            if result == false
              if left
                    move_lower_left_p
                    if @revise_y > DOWN
                      @revise_y = DOWN
                    end
              end
              return result
            end
      elsif @revise_y > DOWN
            result = left2(x - 1, y, distance, 2)
            result &= left2(x, y + 1, distance)
            if result == false
              if left
                    move_upper_left_p
                    if @revise_y < -UP
                      @revise_y = -UP
                    end
              end
              return result
            end
      end
      @revise_x -= distance
      return result
    end
    #--------------------------------------------------------------------------
    def left2(x, y, distance, d = 4)
      if @revise_x - distance < -SIDE
            unless passable?(x, y, d)
              if @revise_x > -SIDE
                    @revise_x = -SIDE
              end
              return false
            end
      end
      return true
    end
    #--------------------------------------------------------------------------
    def move_right_p
            turn_right
      distance = 2 ** @move_speed
      right1(((@x * 128 + @revise_x) / 128.0).round,
                      ((@y * 128 + @revise_y) / 128.0).round, distance, true)
    end
    #--------------------------------------------------------------------------
    def right1(x, y, distance, right = false)
      result = right2(x, y, distance)
      if result == false
            @event_run = check_event_trigger_touch(x+1, y)
            return result
      end
      if @revise_y < -UP
            result = right2(x + 1, y, distance, 8)
            result &= right2(x, y - 1, distance)
            if result == false
              if right
                    move_lower_right_p
                    if @revise_y > DOWN
                      @revise_y = DOWN
                    end
              end
              return result
            end
      elsif @revise_y > DOWN
            result = right2(x + 1, y, distance, 2)
            result &= right2(x, y + 1, distance)
            if result == false
              if right
                    move_upper_right_p
                    if @revise_y < -UP
                      @revise_y = -UP
                    end
              end
              return result
            end
      end
      @revise_x += distance
      return result
    end
    #--------------------------------------------------------------------------
    def right2(x, y, distance, d = 6)
      if @revise_x + distance > SIDE
            unless passable?(x, y, d)
              if @revise_x < SIDE
                    @revise_x = SIDE
              end
              return false
            end
      end
      return true
    end
    #--------------------------------------------------------------------------
    def move_up_p
      turn_up
      distance = 2 ** @move_speed
      up1(((@x * 128 + @revise_x) / 128.0).round,
              ((@y * 128 + @revise_y) / 128.0).round, distance, true)
    end
    #--------------------------------------------------------------------------
    def up1(x, y, distance, up = false)
      result = up2(x, y, distance)
      if result == false
            @event_run = check_event_trigger_touch(x, y-1)
            return result
      end
      if @revise_x < -SIDE
            result = up2(x, y - 1, distance, 4)
            result &= up2(x - 1, y, distance)
            if result == false
              if up
                    move_upper_right_p
                    if @revise_x > SIDE
                      @revise_x = SIDE
                    end
              end
              return result
            end
      elsif @revise_x > SIDE
            result = up2(x, y - 1, distance, 6)
            result &= up2(x + 1, y, distance)
            if result == false
              if up
                    move_upper_left_p
                    if @revise_x < -SIDE
                      @revise_x = -SIDE
                    end
              end
              return result
            end
      end
      @revise_y -= distance
      return result
    end
    #--------------------------------------------------------------------------
    def up2(x, y, distance, d = 8)
      if @revise_y - distance < -UP
            unless passable?(x, y, d)
              if @revise_y > -UP
                    @revise_y = -UP
              end
              return false
            end
      end
      return true
    end
    #--------------------------------------------------------------------------
    def move_lower_left_p
      unless @direction_fix
            @direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
      end
      distance = (2 ** @move_speed) / Math.sqrt(2)
      turn_left unless down1(((@x * 128 + @revise_x) / 128.0).round,
                                                      ((@y * 128 + @revise_y) / 128.0).round, distance)
      turn_down if @event_run
      unless @event_run
            if last_move?(@real_x, @real_y, 2, distance)
              result = check_event_trigger_here([1,2], false)
              if result == true
                    return
              end
            end
            move_on
            if @revise_y > DOWN and -UP > @revise_y - distance
              @revise_y = DOWN
            end
            turn_down unless left1(((@x * 128 + @revise_x) / 128.0).round,
                                                      ((@y * 128 + @revise_y) / 128.0).round, distance)
            turn_left if @event_run
      end
    end
    #--------------------------------------------------------------------------
    def move_lower_right_p
      unless @direction_fix
            @direction = (@direction == 4 ? 6 : @direction == 8 ? 2 : @direction)
      end
      distance = (2 ** @move_speed) / Math.sqrt(2)
      turn_right unless down1(((@x * 128 + @revise_x) / 128.0).round,
                                                      ((@y * 128 + @revise_y) / 128.0).round, distance)
      turn_down if @event_run
      unless @event_run
            if last_move?(@real_x, @real_y, 2, distance)
              result = check_event_trigger_here([1,2], false)
              if result == true
                    return
              end
            end
            move_on
            if @revise_y > DOWN and -UP > @revise_y - distance
              @revise_y = DOWN
            end
            turn_down unless right1(((@x * 128 + @revise_x) / 128.0).round,
                                                      ((@y * 128 + @revise_y) / 128.0).round, distance)
            turn_right if @event_run
      end
    end
    #--------------------------------------------------------------------------
    def move_upper_left_p
      unless @direction_fix
            @direction = (@direction == 6 ? 4 : @direction == 2 ? 8 : @direction)
      end
      distance = (2 ** @move_speed) / Math.sqrt(2)
      turn_left unless up1(((@x * 128 + @revise_x) / 128.0).round,
                                                    ((@y * 128 + @revise_y) / 128.0).round, distance)
      turn_up if @event_run
      unless @event_run
            if last_move?(@real_x, @real_y, 8, distance)
              result = check_event_trigger_here([1,2], false)
              if result == true
                    return
              end
            end
            move_on
            if @revise_y + distance > DOWN and -UP > @revise_y
              @revise_y = -UP
            end
            turn_up unless left1(((@x * 128 + @revise_x) / 128.0).round,
                                                      ((@y * 128 + @revise_y) / 128.0).round, distance)
            turn_left if @event_run
      end
    end
    #--------------------------------------------------------------------------
    def move_upper_right_p
      unless @direction_fix
            @direction = (@direction == 4 ? 6 : @direction == 2 ? 8 : @direction)
      end
      distance = (2 ** @move_speed) / Math.sqrt(2)
      turn_right unless up1(((@x * 128 + @revise_x) / 128.0).round,
                                                    ((@y * 128 + @revise_y) / 128.0).round, distance)
      turn_up if @event_run
      unless @event_run
            if last_move?(@real_x, @real_y, 8, distance)
              result = check_event_trigger_here([1,2], false)
              if result == true
                    return
              end
            end
            move_on
            if @revise_y + distance > DOWN and -UP > @revise_y
              @revise_y = -UP
            end
            turn_up unless right1(((@x * 128 + @revise_x) / 128.0).round,
                                                      ((@y * 128 + @revise_y) / 128.0).round, distance)
            turn_right if @event_run
      end
    end
    #--------------------------------------------------------------------------
    def check_event_trigger_here(triggers, run = true)
      result = false
      if $game_system.map_interpreter.running?
            return result
      end
      for event in $game_map.events.values
            if event.x == ((@x * 128 + @revise_x) / 128.0).round and
                    event.y == ((@y * 128 + @revise_y) / 128.0).round and
                    triggers.include?(event.trigger)
              if not event.jumping? and event.over_trigger?
                    if event.list.size > 1
                      if run == true
                            event.start
                      end
                      result = true
                    end
              end
            end
      end
      return result
    end
    #--------------------------------------------------------------------------
    def move_on
      if @y < (@y + @revise_y / 128.0).round
            @y += 1
            @revise_y -= 128
      end
      if @x > (@x + @revise_x / 128.0).round
            @x -= 1
            @revise_x += 128
      end
      if @x < (@x + @revise_x / 128.0).round
            @x += 1
            @revise_x -= 128
      end
      if @y > (@y + @revise_y / 128.0).round
            @y -= 1
            @revise_y += 128
      end
    end
    #--------------------------------------------------------------------------
    def anime_update
      if @walk_anime
            @anime_count += 1.5
      elsif @step_anime
            @anime_count += 1
      end
      if @anime_count > 18 - @move_speed * 2
            if not @step_anime and @stop_count > 0
              @pattern = @original_pattern
            else
              @pattern = (@pattern + 1) % 4
            end
            @anime_count = 0
      end
    end
    #--------------------------------------------------------------------------
    alias :moveto_original :moveto
    def moveto(x, y)
      @revise_x = 0
      @revise_y = 0
      moveto_original(x, y)
    end
    #--------------------------------------------------------------------------
    def last_move?(x, y, direction, distance)
      if direction == 2 or direction == 6
            distance *= -1
      end
      if (direction == 2 or direction == 8) and
              (y / 128.0).round != ((y - distance) / 128.0).round
            return true
      end
      if (direction == 4 or direction == 6) and
              (x / 128.0).round != ((x - distance) / 128.0).round
            return true
      end
      return false
    end
    end
    
    #==============================================================================
    # Game_Character
    #==============================================================================
    class Game_Character
    def update_move
      distance = 2 ** @move_speed
      if @x * 128 != @real_x and @y * 128 != @real_y and Game_Player::SLANT
            distance /= Math.sqrt(2)
      end
      if @y * 128 > @real_y
            @real_y = [@real_y + distance, @y * 128].min
      end
      if @x * 128 < @real_x
            @real_x = [@real_x - distance, @x * 128].max
      end
      if @x * 128 > @real_x
            @real_x = [@real_x + distance, @x * 128].min
      end
      if @y * 128 < @real_y
            @real_y = [@real_y - distance, @y * 128].max
      end
      if @walk_anime
            @anime_count += 1.5
      elsif @step_anime
            @anime_count += 1
      end
    end
    end
    #==============================================================================
    # Game_Event
    #==============================================================================
    class Game_Event < Game_Character
    def start
      if @list.size > 1
            if $game_player.event != 0
              $game_player.move_speed = $game_player.event
            end
            @starting = true
      end
    end
    end

  2. #2

    Doktor von Stein Gast
    Hallo DrYaCil,
    erzähl doch einfach erstmal, welche Variable du meinst. Ich glaube, die meisten hier haben besseres zu tun, als den gesamten Code durchzuforsten.

    MfG
    Doktor von Stein

  3. #3
    hast du die scripts gemeinsam in nem Projekt gehabt und nen Fehler erhalten? Wenn ja, dann bitte mal ne Fehlermeldung her, weil zurzeit beschreibt das eine Script den Game_Player und das andere die Klasse New_Game_Player. Theoretisch dürfte es so keine Probleme geben, habs mir aber nicht wirklich angeguckt.

  4. #4
    sry, hab jetzt seit über einen Jahr nicht mehr multimediaxis genutzt. Hab nämlich total vergessen, das ich hier angemeldet bin XP. Thread kann also geschlossen werden, wenns jetzt nich schon getan wurde.

    Achja, btw. Die Sache mit den beiden Skripts hat sich erledigt. Ich nutze jetzt nur pixelmovement.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •