別口でご回答させていただきましたが、為念こちらにも。
gameMakerは学んだことがなく知識や仕様理解は暗いですが、気になった点としてインスタンスの生成を上げさせていただきました。 もう1点、idleとwalk内で同様の処理が記述されていることも、冗長になりがちな点と、コピペミス等で不具合が発生する原因になりそうであったため、少し気になりました。
上記2点をとりあえず解決するという目的で、自分ならこうするかな? という観点でコードを記載させていただきます。
先に述べました通り、gameMakerには疎いため、文法等に不備等がありましたらご容赦ください。(withってなんやレベルでした) あくまで考え方のひとつとして見ていただければと思います。
function character(_obj) constructor { obj = _obj; cnt; current_motion; idle = new motion(obj, spr_player_idle, 60, 0.01); walk = new motion(obj, spr_player_walk, 60, 0.2, 2); init = function() { cnt = 0; idle.next_motion = walk; walk.next_motion = idle; current_motion = idle; } loop = function() { if (cnt >= current_motion.limit) { current_motion = current_motion.next_motion(); cnt = 0; obj.sprite_index = current_motion.sprite; obj.image_speed = current_motion.image_speed; } current_motion.action(); cnt++; } }
function idle(_obj, _sprite, _image_speed, _limit) constructor { obj = _obj; sprite = _sprite; image_speed = _image_speed; limit = _limit; next_motion; action = function() { } }
function walk(_obj, _sprite, _imgspd, _limit, _speed) constructor { obj = _obj; sprite = _sprite; image_speed = _image_speed; limit = _limit; speed = _speed; next_motion; action = function() { with (obj) x += speed; } }
以下、メモ書きです。
それっぽくかんがえたこと
不適切なコンテンツとして通報するには以下の「送信」ボタンを押して下さい。 管理チームへ匿名通報が送信されます。あなたが誰であるかを管理チームに特定されることはありません。
どのように不適切か説明したい場合、メッセージをご記入下さい。空白のままでも通報は送信されます。
通報履歴 で、あなたの通報と対応時のメッセージを確認できます。
マニュアル(ver2~2.2.x) マニュアル(ver2.3~) YoYoGames YoYoGames 公式コミュニティ GM関連のYoutubeチャンネル集 解説・資料サイト集(日本語) 解説・資料サイト集(英語)
別口でご回答させていただきましたが、為念こちらにも。
gameMakerは学んだことがなく知識や仕様理解は暗いですが、気になった点としてインスタンスの生成を上げさせていただきました。
もう1点、idleとwalk内で同様の処理が記述されていることも、冗長になりがちな点と、コピペミス等で不具合が発生する原因になりそうであったため、少し気になりました。
上記2点をとりあえず解決するという目的で、自分ならこうするかな? という観点でコードを記載させていただきます。
先に述べました通り、gameMakerには疎いため、文法等に不備等がありましたらご容赦ください。(withってなんやレベルでした)
あくまで考え方のひとつとして見ていただければと思います。
以下、メモ書きです。
それっぽくかんがえたこと
newしないで切り替えできるように
(ここだけ見ると構成的にo_playerに持たせてもよさそうな?)
ついでにidleとwalkで共通していた処理も1か所書けばいいようになった気がする
何かしら実行するときはこれだけ見てればいい
gameMakerで出来るかどうかは知見のなさ故に不明瞭ですが、たぶんできるやろの精神
本当はアドレス指定よりKey値で指定できる形が望ましいと思いますが、とりあえずの形で
切り替えるときはloopで60cntした時だったところを、limit変数にしてみた
limitもidleとかに持たせたのでidleは60f, walkは40fとか個別指定もできるかも?
全く別のobjからもidleやwalkが使える
移動量とかも全部インスタンス生成時に設定できるからmotionで指定するとかできそうな気がする
汎用性は低そうなのでそこまでする必要があるかどうかは不明
ソースよりコメントに時間がかかってしまった長文になってしまい申し訳ございませぬ・・・