질문과 답변

Extra Form
종류 스크립트 사용

 일단 제 프로젝트에서 사용하고 있는 스크립트가 픽셀+대각선이동인데


혹시 대각선 이동시 스프라이트가 변경되게 할 수 있을까요?!

(예를 들자면 대각선 이동시 _quarter 가 붙은 스프라이트로 변경되는걸로요.)

스크립트가 아니면 이벤트로도 구현이 가능할까요?


만약 스크립트를 적용해야 한다면, 해당 스크립트를 본문에 올려드리겠습니다. 스크립트에 대한 지식이 매우 부족하지만 쿼터뷰 (영어로는 아이소메트릭) 게임을 만들고 싶습니다!

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

# ★ ドット移動  ver 2.8                                          [2008-02-13]

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

#   マップでドット移動 (マスを無視して移動) させるスクリプトです。

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

# スクリプト : shun  (Simp : http://simp.nobody.jp)

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


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

# □ Dms

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

#   Simp のスクリプト素材 [ドット移動] の設定を扱うモジュールです。定数をそれ

# ぞれのクラス, モジュールから参照します。

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

#   スクリプトユーザーは、このモジュールで定義する定数を変更することにより設定

# を変更することができます。

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

module Dms

  #

  # ◇ 8 方向移動するか

  #

  EIGHT = true

  #

  # ◇ ダッシュ

  #

  DASH_TYPE = 2           # 0..ダッシュしない, 1..押下時, 2..立ち止まるまで

  DASH_BUTTON = Input::C  # ダッシュボタン (Input::ボタン)

                          #  ヘルプの Input の定数の項目を参照してみて下さい。

end


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

# ■ Numeric

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

class Numeric < Object

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

  # ○ 任意桁の切り捨て

  #     d : 切り捨てる桁

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

  def rounddown(d = 0)

    x = 10 ** -d

    (self * x).truncate.quo(x)

  end

end


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

# ■ Game_Player

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

class Game_Player < Game_Character

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

  # ● 公開インスタンス変数

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

  attr_writer   :width                    # グラフィックの幅

  attr_writer   :height                   # グラフィックの高さ

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

  # ● オブジェクト初期化

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

  def initialize

    super

    @real_direction = 2

  end

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

  # ● すり抜け判定

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

  def through

    # 外部としての自分に対するチェックでは true を返す

    #  (すり抜けとしての判定は @through で直接参照される)

    return (@passable_checking or super)

  end

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

  # ● 通行可能判定

  #     x : X 座標

  #     y : Y 座標

  #     d : 方向 (0,2,4,5,6,8)

  #         ※ 0..全方向通行不可の場合を判定 (ジャンプ用), 5..常に true

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

  alias :__orig_dms__passable? :passable?

  def passable?(x, y, d)

    @passable_checking = true

    result = true

    # 移動制限の範囲を算出

    range_x = (x + 0.5 - @width.quo(2) )..(x + 0.5 + @width.quo(2))

    range_y = (y + 0.5 - @height.quo(2))..(y + 0.5 + @height.quo(2))

    if d == 2 or d == 8     # Y 方向

      min_x, max_x = range_x.first.floor, range_x.last.ceil - 1

      (min_x..max_x).each {|sx|

        unless __orig_dms__passable?(sx, y.truncate, d)

          result = false

          break

        end

      }

    elsif d == 4 or d == 6  # X 方向

      min_y, max_y = range_y.first.floor, range_y.last.ceil - 1

      (min_y..max_y).each {|sy|

        unless __orig_dms__passable?(x.truncate, sy, d)

          result = false

          break

        end

      }

    end

    @passable_checking = false

    return result

  end

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

  # ● 歩数増加

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

  alias :__orig_dms__increase_steps :increase_steps

  def increase_steps

    __orig_dms__increase_steps

    # イベント実行中、移動ルート強制中

    # デバッグモードが ON かつ CTRL キーが押されている場合のいずれでもない場合

    unless $game_system.map_interpreter.running? or

           @move_route_forcing or ($DEBUG and Input.press?(Input::CTRL))

      # エンカウント カウントダウン

      @encounter_count -= 1 if @encounter_count > 0

    end

  end

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

  # ● 同位置のイベント起動判定

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

  alias :__orig_dms__check_event_trigger_here :check_event_trigger_here

  def check_event_trigger_here(triggers)

    last_x, last_y = @x, @y

    @x, @y = @x.round, @y.round

    result = __orig_dms__check_event_trigger_here(triggers)

    @x, @y = last_x, last_y

    return result

  end

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

  # ● 正面のイベント起動判定

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

  alias :__orig_dms__check_event_trigger_there :check_event_trigger_there

  def check_event_trigger_there(triggers)

    last_x, last_y = @x, @y

    @x, @y = @x.round, @y.round

    result = __orig_dms__check_event_trigger_there(triggers)

    @x, @y = last_x, last_y

    return result

  end

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

  # ● 接触イベントの起動判定

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

  alias :__orig_dms__check_event_trigger_touch :check_event_trigger_touch

  def check_event_trigger_touch(x, y)

    __orig_dms__check_event_trigger_touch(x.round, y.round)

  end

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

  # ● フレーム更新

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

  def update

    # ダッシュフラグをクリア

    @dash = false if Dms::DASH_TYPE == 1

    # 移動中、イベント実行中、移動ルート強制中、

    # メッセージウィンドウ表示中のいずれでもない場合

    unless moving? or $game_system.map_interpreter.running? or

           @move_route_forcing or $game_temp.message_window_showing

      # ダッシュボタンが押されていれば、ダッシュフラグをセット

      @dash = true if Input.press?(Dms::DASH_BUTTON) and Dms::DASH_TYPE != 0

      # 方向ボタンが押されていれば、その方向へプレイヤーを移動

      dir = (Dms::EIGHT ? Input.dir8 : Input.dir4)

      case dir

        when 1 ; move_lower_left

        when 2 ; move_down

        when 3 ; move_lower_right

        when 4 ; move_left

        when 6 ; move_right

        when 7 ; move_upper_left

        when 8 ; move_up

        when 9 ; move_upper_right

      end

    end

    # ローカル変数に座標を記憶

    last_real_x, last_real_y = @real_x, @real_y

    super

    # 移動しなかった場合、ダッシュフラグをクリア

    @dash = false if @real_x == last_real_x and @real_y == last_real_y

    # キャラクターが下に移動し、かつ画面上の位置が中央より下の場合

    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?

      # 同位置のイベントとの接触によるイベント起動判定

      check_event_trigger_here([1,2])

      # C ボタンが押された場合

      if Input.trigger?(Input::C)

        # 同位置および正面のイベント起動判定

        check_event_trigger_here([0])

        check_event_trigger_there([0,1,2])

      end

    end

  end

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

  # ● フレーム更新 (移動)

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

  def update_move

    # ダッシュフラグが有効なら、一時的に移動速度を上げる

    @move_speed += 1 if @dash

    super

    @move_speed -= 1 if @dash

  end

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

  # ● 下に移動

  #     turn_enabled : その場での向き変更を許可するフラグ

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

  def move_down(turn_enabled = true)

    # 下を向く

    turn_down if turn_enabled

    # 座標をずらす

    shift_coord(0, 1)

  end

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

  # ● 左に移動

  #     turn_enabled : その場での向き変更を許可するフラグ

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

  def move_left(turn_enabled = true)

    # 左を向く

    turn_left if turn_enabled

    # 座標をずらす

    shift_coord(-1, 0)

  end

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

  # ● 右に移動

  #     turn_enabled : その場での向き変更を許可するフラグ

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

  def move_right(turn_enabled = true)

    # 右を向く

    turn_right if turn_enabled

    # 座標をずらす

    shift_coord(1, 0)

  end

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

  # ● 上に移動

  #     turn_enabled : その場での向き変更を許可するフラグ

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

  def move_up(turn_enabled = true)

    # 上を向く

    turn_up if turn_enabled

    # 座標をずらす

    shift_coord(0, -1)

  end

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

  # ● 左下に移動

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

  def move_lower_left

    # 向き固定でない場合

    unless @direction_fix

      # 右向きだった場合は左を、上向きだった場合は下を向く

      @direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)

      @real_direction = 1

    end

    # 座標をずらす

    shift_coord(-1, 1)

  end

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

  # ● 右下に移動

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

  def move_lower_right

    # 向き固定でない場合

    unless @direction_fix

      # 左向きだった場合は右を、上向きだった場合は下を向く

      @direction = (@direction == 4 ? 6 : @direction == 8 ? 2 : @direction)

      @real_direction = 3

    end

    # 座標をずらす

    shift_coord(1, 1)

  end

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

  # ● 左上に移動

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

  def move_upper_left

    # 向き固定でない場合

    unless @direction_fix

      # 右向きだった場合は左を、下向きだった場合は上を向く

      @direction = (@direction == 6 ? 4 : @direction == 2 ? 8 : @direction)

      @real_direction = 7

    end

    # 座標をずらす

    shift_coord(-1, -1)

  end

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

  # ● 右上に移動

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

  def move_upper_right

    # 向き固定でない場合

    unless @direction_fix

      # 左向きだった場合は右を、下向きだった場合は上を向く

      @direction = (@direction == 4 ? 6 : @direction == 2 ? 8 : @direction)

      @real_direction = 9

    end

    # 座標をずらす

    shift_coord(1, -1)

  end

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

  # ● 一歩前進

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

  def move_forward

    # 向き固定の状態を記憶

    last_direction_fix = @direction_fix

    # 強制的に向き固定を解除

    @direction_fix = false

    case @real_direction

      when 1 ; move_lower_left

      when 2 ; move_down(false)

      when 3 ; move_lower_right

      when 4 ; move_left(false)

      when 6 ; move_right(false)

      when 7 ; move_upper_left

      when 8 ; move_up(false)

      when 9 ; move_upper_right

    end

    # 向き固定の状態を元に戻す

    @direction_fix = last_direction_fix

  end

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

  # ● 一歩後退

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

  def move_backward

    # 向き固定の状態を記憶

    last_direction_fix = @direction_fix

    # 強制的に向き固定

    @direction_fix = true

    # 向きで分岐

    case @real_direction

      when 1 ; move_upper_right

      when 2 ; move_up(false)

      when 3 ; move_upper_left

      when 4 ; move_right(false)

      when 6 ; move_left(false)

      when 7 ; move_lower_right

      when 8 ; move_down(false)

      when 9 ; move_lower_left

    end

    # 向き固定の状態を元に戻す

    @direction_fix = last_direction_fix

  end

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

  # ○ 座標をずらす

  #     x : X 方向の移動量 (論理座標)

  #     y : Y 方向の移動量 (論理座標)

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

  def shift_coord(x, y)

    # 移動速度からマップ座標系での移動距離に変換

    speed = (@dash ? @move_speed + 1 : @move_speed)

    distance = (2 ** speed).quo(128).rounddown(-3)

    distance = 1 if @move_route_forcing and not @dot

    dx, dy = x * distance, y * distance

    # ローカル変数に座標を記憶

    last_x, last_y = @x.truncate, @y.truncate

    # 移動制限の範囲を算出

    range_x = (@x + 0.5 - @width.quo(2) )..(@x + 0.5 + @width.quo(2))

    range_y = (@y + 0.5 - @height.quo(2))..(@y + 0.5 + @height.quo(2))

    # 実際の移動距離を算出

    if dx > 0     # 右方向

      min_x, max_x = range_x.first.floor, (range_x.last + dx).ceil - 1

      (max_x - min_x).times {|sx|

        next if passable?(min_x + sx, @y, 6)

        dx = (min_x + sx + 1) - range_x.last

        check_event_trigger_touch(min_x + sx + 1, @y)

        break

      }

    elsif dx < 0  # 左方向

      min_x, max_x = (range_x.first + dx).floor, range_x.last.ceil - 1

      (max_x - min_x).times {|sx|

        next if passable?(max_x - sx, @y, 4)

        dx = (max_x - sx) - range_x.first

        check_event_trigger_touch(max_x - sx - 1, @y)

        break

      }

    end

    if dy > 0     # 下方向

      min_y, max_y = range_y.first.floor, (range_y.last + dy).ceil - 1

      (max_y - min_y).times {|sy|

        next if passable?(@x, min_y + sy, 2)

        dy = (min_y + sy + 1) - range_y.last

        check_event_trigger_touch(@x, min_y + sy + 1)

        break

      }

    elsif dy < 0  # 上方向

      min_y, max_y = (range_y.first + dy).floor, range_y.last.ceil - 1

      (max_y - min_y).times {|sy|

        next if passable?(@x, max_y - sy, 8)

        dy = (max_y - sy) - range_y.first

        check_event_trigger_touch(@x, max_y - sy - 1)

        break

      }

    end

    # 座標を変化させる

    @x += dx

    @y += dy

    # 不要な桁を切り捨て

    @x, @y = @x.rounddown(-3), @y.rounddown(-3)

    # 1 マス分以上座標が変化した場合、歩数増加

    increase_steps if @x.truncate != last_x or @y.truncate != last_y

  end

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

  # ● 下を向く

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

  alias :__orig_dms__turn_down :turn_down unless $@

  def turn_down

    __orig_dms__turn_down

    @real_direction = 2 unless @direction_fix

  end

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

  # ● 左を向く

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

  alias :__orig_dms__turn_left :turn_left unless $@

  def turn_left

    __orig_dms__turn_left

    @real_direction = 4 unless @direction_fix

  end

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

  # ● 右を向く

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

  alias :__orig_dms__turn_right :turn_right unless $@

  def turn_right

    __orig_dms__turn_right

    @real_direction = 6 unless @direction_fix

  end

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

  # ● 上を向く

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

  alias :__orig_dms__turn_up :turn_up unless $@

  def turn_up

    __orig_dms__turn_up

    @real_direction = 8 unless @direction_fix

  end

end


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

# ■ Sprite_Character

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

class Sprite_Character < RPG::Sprite

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

  # ● フレーム更新

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

  alias :__orig_dms__update :update

  def update

    # タイル ID、ファイル名、色相のどれかが現在のものと異なる場合

    if (@tile_id != @character.tile_id) or

       (@character_name != @character.character_name) or

       (@character_hue != @character.character_hue)

      # タイル ID が無効でキャラクターがプレイヤーの場合

      flag = true if @character.tile_id < 384 and @character.is_a?(Game_Player)

    end

    __orig_dms__update

    # 変更フラグが有効な場合

    @character.width, @character.height = @cw.quo(32), 1 if flag

  end

end


 


 

 

 

 

 

 

 

 

■ 질문전 필독!
  • 질문할 내용이 이 게시판이나 강좌에 이미 있는지 확인합니다.
  • 하나의 게시물에는 하나의 질문만 합니다.
  • 제목은 질문의 핵심 내용으로 작성합니다.
  • 질문 내용은 답변자가 쉽게 이해할 수 있도록 최대한 상세하게 작성합니다.
  • 스크립트의 전문이 필요할 경우 txt 파일 등으로 첨부해 주시기 바랍니다.
  • 답변받은 게시물은 삭제하지 않습니다.
  • 답변이 완료된 경우 해당 답변해주신 분들께 감사의 댓글을 달아줍니다.
    • 처음 오신 분들은 공지 게시물을 반드시 읽어주세요!

※ 미준수시 사전경고 없이 게시물을 삭제합니다.


List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 12387
RMVXA 장비 장착시마다 발동되는 이벤트?(해결) 1 버너코코넛 2018.12.11 96
RMVXA 전투 중 몬스터 전멸 후 전투를 종료하지 않고 이벤트 발생시키는 방법을 알려주세요. 1 HexTech 2018.05.26 96
턴제 전투 RMMV 캐릭터 스킬 하나로 적한테 데미지 주고 자기한테 버프 걸게 할수있을까요? 4 Kokodd 2021.04.06 95
기본툴 사용법 RMMV 공격과 방어키 삭제 2 Timeout 2020.03.28 95
기타 RMMV 맵 이동뒤에 플래이어 캐릭터가 움직이지 않아요 2 미이인트 2018.12.27 95
RMMV 메세지 관련 질문(해결) 1 감짱 2018.10.01 95
기타 RMMV 직접 만든 애니메이션 적용시 배율에 따른 화질 문제 file 깡토 2020.08.18 95
RMVXA 이 스크립트 쓰고싶은데 변수를 모르겠는데요! 1 니꺼해 2017.04.21 95
기타 특정 대사에서 에러가 발생해서 튕깁니다. file 종숙 2016.12.04 95
RMXP 메뉴창이 뜨질 않습니다 1 뚜러뻥 2016.09.16 95
에러 해결 RMVXA 캐릭터 시야에 벗어나면 이벤트가 쫒아오질 않아요 2 Wolfclaw 2020.03.07 95
RMXP 적이 피격시 흔들리게 하는방법 세레네키 2016.07.21 95
RMXP 맵 이동을 헸는데 안사라져요 3 퀼트 2017.03.16 95
RMVXA 질문합니다. 1 류미엘 2015.10.07 95
RMMV 스크립트로 게임 데이터 조작 관련 함수 질문 있습니다 najongjine 2017.03.23 95
이벤트 작성 RMMV 대화창이 열려있는 도중 이벤트가 움직이게 만들고 싶습니다 2 file Ggamer 2021.09.22 95
RMMV 사이드뷰 배틀러 사용시 전투 메뉴 위로 배틀러가 표시되게 할수있나요? 마리모캉 2018.03.13 95
RMMV 이벤트가 이벤트를 따라가도록 만들 수 있나요? 2 질라이자로즈 2018.03.20 95
RMMV 특정 시간동안 npc에게서 도망치게 만들고 싶습니다 2 카시어스 2018.03.22 95
기타 알만툴 실행 질문 1 fijifufi4859 2017.01.28 95
Board Pagination Prev 1 ... 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 ... 516 Next
/ 516