이동 및 탈것

8 방향 이동 스크립트 ( 사선 이동 캐릭터 그래픽 지원 )

by 미루 posted Jul 11, 2013
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

스크립트 :


#==============================================================================

# 8 방향 이동 스크립트                             번역 : 미루          출처 : JV Master Script

#------------------------------------------------------------------------------

# 플레이어가 8 방향으로 이동할 수 있도록 한다.

# 사선 이동 그래픽 지원.

#==============================================================================


module JvScripts

  module Dirs8

    

    Switch = 0               # 4 방향 이동과 8 방향 이동을 전환하는 스위치의 ID 를 설정

                                 # 0 일경우 항상 8 방향 이동으로 설정된다.

                                 

    DiagonalSuffix = "_di"   # 8 방향 캐릭터 그래픽 뒤에 붙는 문구 ( 접미사 ) 를 설정

                                     # 8 방향 캐릭터 그래픽의 첫번째는 수직/수평이동

                                     # 두번째는 사선이동 그래픽을 넣어주세요.

  end

end


#==============================================================================

# Game CharacterBase

#==============================================================================

class Game_CharacterBase

  

  def move_diagonal(horz, vert)

    @move_succeed = diagonal_passable?(x, y, horz, vert)

    if @move_succeed

      @x = $game_map.round_x_with_direction(@x, horz)

      @y = $game_map.round_y_with_direction(@y, vert)

      @real_x = $game_map.x_with_direction(@x, reverse_dir(horz))

      @real_y = $game_map.y_with_direction(@y, reverse_dir(vert))

      increase_steps

    end

    if diagonal_charset?

      set_direction_diagonal(horz, vert)

    else

      set_direction(horz) if @direction == reverse_dir(horz)

      set_direction(vert) if @direction == reverse_dir(vert)

    end

  end

  

  def set_direction(d)

    if !@direction_fix && d != 0

      @direction = d

      @character_index = 0 if diagonal_charset?

    end

    @stop_count = 0

  end

  

  def set_direction_diagonal(horz, vert)

    if !@direction_fix && horz != 0 && vert != 0

      if horz == 4 && vert == 2

        @direction = 2

      elsif horz == 4 && vert == 8

        @direction = 4

      elsif horz == 6 && vert == 2

        @direction = 6

      elsif horz == 6 && vert == 8

        @direction = 8

      end

      

      @character_index = 1

    end

    @stop_count = 0

  end

  

  def diagonal_charset?

    true if @character_name.include?(JvScripts::Dirs8::DiagonalSuffix)

  end

end


#==============================================================================

# Game Player

#==============================================================================

class Game_Player < Game_Character

  def move_by_input

    return if !movable? || $game_map.interpreter.running?

    if JvScripts::Dirs8::Switch > 0

      if $game_switches[JvScripts::Dirs8::Switch] == true

        case Input.dir8

        when 2, 4, 6, 8

          move_straight(Input.dir4)

        when 1

          move_diagonal(4, 2)

        when 3

          move_diagonal(6, 2)

        when 7

          move_diagonal(4, 8)

        when 9

          move_diagonal(6, 8)

        end

      else

        move_straight(Input.dir4) if Input.dir4 > 0

      end

    else

      if Input.dir8 > 0

        case Input.dir8

        when 2, 4, 6, 8

          move_straight(Input.dir4)

        when 1

          move_diagonal(4, 2)

        when 3

          move_diagonal(6, 2)

        when 7

          move_diagonal(4, 8)

        when 9

          move_diagonal(6, 8)

        end

      end

    end

  end

end

#==============================================================================






사선이동 그래픽 규격 :


Character_di.png