RPGツクールVX RGSS2備忘録その4 キャラクターの回転

正月休みも残り1日となりました(´;ω;`)ウッ
今回の正月休みは、ずうっとRGSS三昧だったので、
熱中してたぶん、過ぎるのが早く感じます。

で、今日はスクリプトをつかってキャラクターを回転させるって言うのをやります。
回転といっても、向きを上下左右にするの意味ではなく、視覚的に角度を指定して
キャラクターを回転させます。
080105_01.jpg

RPGツクールVXには、もともとキャラクターを回転させるっていうイベントコマンドがないので
人が倒れたりしているところなどを見た目では表現できませんでした。
そこで、今回そういうのを可能にするスクリプトを作ってみました。

class Game_Character
  attr_accessor :angle #角度
  def initialize
    @angle = 0
    @id = 0
    @x = 0
    @y = 0
   
    ‥‥省略‥‥
   
    @move_failed = false                  # 移動失敗フラグ
  end
end


まずは、Game_Characterクラスからです。
こちらは簡単、ただ、@angleというインスタンス変数を付け加えるだけです。

つぎに、Sprite_Characterクラスです。

class Sprite_Character
  def initialize(viewport, character = nil)
    super(viewport)
    @character = character
    @balloon_duration = 0
    @adjust = 0
    update
  end
  def update
    super
    update_bitmap
    self.visible = (not @character.transparent)
    update_src_rect
    self.x = @character.screen_x
    #★
    if self.angle != @character.angle
      self.angle = @character.angle
      if self.angle != 0
        self.oy = @adjust = self.height / 2
      else
        self.oy = @ch
        @adjust = 0
      end
    end
    #★
    self.y = @character.screen_y - @adjust
    self.z = @character.screen_z
    self.opacity = @character.opacity
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
    update_balloon
    if @character.animation_id != 0
      animation = $data_animations[@character.animation_id]
      start_animation(animation)
      @character.animation_id = 0
    end
    if @character.balloon_id != 0
      @balloon_id = @character.balloon_id
      start_balloon
      @character.balloon_id = 0
    end
  end
end


こちらは、意外や意外、あっさりできるかと思いましたが、そこそこ苦戦しました。
まず、キャラクターの原点はx方向で見れば真ん中ですが、y方向でみると
下端になっています。なので、これをself.oy = @adjust = self.height / 2
で中央にもってこなければなりません。
最初はこれだけでできるかとおもったら、少し、下のほうにずれて表示されます。
これは、原点が本来の足元に来るようにスプライトが表示される仕組みになってるので、
さらに、スプライトの高さの半分分、上の方向にずらさなければなりません。
@adjustというインスタンス変数を準備しておき、スプライトの角度が変わったときだけ
self.y = @character.screen_y - @adjustで上にずらしてやる
という風にしてあげました。

最後に、イベントコマンドをつかって実際に角度指定する場合は、
スクリプトで、90°回転させたいなら、$game_map.events[@event_id].angle = 90
というように、また、自分を回転させる場合は
$game_player.angle = 90というふうに、します。
080105_02.jpg

乱数をつかってあそんでみました( ^ω^)

みなさん、でわまたです( ^ω^)ノシ
スポンサーサイト

テーマ : RPGツクール
ジャンル : ゲーム

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

1/100 MG ストライクフリーダムガンダム フ

このキットの製作者に敬意を表したい悪趣味と散々言われたストライクフリーダムが素晴らしい出来になりましたTV中では派手に光っていた関節部の金色は暗めの光沢メッキで表現されています黒のスミ入れを施すととても良く見栄えします残念なのは一部の露出部がメッキではな...

コメントの投稿

管理者にだけ表示を許可する

幻想的!

なんか…幻想的なスクリプト(^^)
意外な所で使えそうですね!

宇宙空間でただよってるところを表現するのにも
つかえるかもしれませんね( ^ω^)

すごい

すばらしいスクリプトですね!!
こういうことが出来るスクリプト、
探してみたんですが、他にはありませんでした。使わせていただいてもよろしいでしょうか。

ご覧いただきありがとうございます。
記載されているスクリプトはどうぞ
ご自由におつかいください。
もしかしたら、バグがあるかもしれませんが。^^;

ありがとうございます!!
ところで、
さきほど早速使わせてもらったのですが、エラーが出てしまいました…

「スクリプト「sprite_Charactor」の46行目で、No Method Errorが発生しました。undefined method 'angle' for #<Game_Event:0x1a4b9f8>」と出るのですが、原因等わかりますでしょうか…すみません…

コロさんへ

そのエラーていうのは、ゲームを開始するといきなり発生するんですよね?
おそらくGame_Characterクラスのところに
attr_accessor :angle ていうのを入れるのを忘れてるんじゃ
ないでしょうか?
もしちがってたら ・・・すみません。

管理人様、
そのとおりやってみたところ出来ました。
ありがとうございました^^

管理人様、度々スミマセン…
このスクリプトは、ゲームが出来て公開しようと思ったら、報告等したほうがよろしいでしょうか?

コロさんへ

問題が解決して何よりです。( ^ω^)
それと、このブログに書かれているスクリプトや、
改造方法はみんな自由につかってもOKですよ。
別に報告とかもしなくても大丈夫ですよ。(^▽^)

了解です。スクリプトかつようさせていただきますね!!
ありがとうございます。
私のゲームは、多分出来上がるのは1年後くらいになると思われます(笑
プロフィール

Suppon

Author:Suppon
すっぽんでーす。(^▽^)
カルドラ鋭意制作中( ・`ω・´)
Twitter => suppon01
メールはこちらへ
suppon2008@gmail.com

Twitter...

Twitter Reload

最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
ブロとも申請フォーム

この人とブロともになる