- 1 名前:◆CroTXRGSSk★ 投稿日: 2007/05/25(金) 23:27:27
- スクリプトを書くため、Rubyについて勉強を始めてはみたが
分からないことが多すぎる……という、初心者の方々からの 質問を受け付けるスレッドです。
◆このスレッドでは、投げやり回答はできるだけ避けてください。 せめて他への誘導を。
過去スレ Ruby&RGSS初心者用質問スレ http://jbbs.livedoor.jp/bbs/read.cgi/game/14836/1086969089/ Ruby&RGSS初心者用質問スレ Part2 http://jbbs.livedoor.jp/bbs/read.cgi/game/14836/1092469687/ Ruby&RGSS初心者用質問スレ Part3 http://jbbs.livedoor.jp/bbs/read.cgi/game/14836/1108961189/ Ruby&RGSS初心者用質問スレ Part4 http://jbbs.livedoor.jp/bbs/read.cgi/game/14836/1137649115/
まとめサイト・「RPGTKOOLXP/RGSS Wiki」 http://tkool.web-ghost.net/wiki/wiki.cgi 質問前に見てみるといいと思います。
Rubyのお勉強をするスレ http://jbbs.livedoor.jp/bbs/read.cgi/game/14836/1096584382/ 何かと役に立つと思います。
参考になりそうなリンクを>>2にピックアップ。
他に何かあれば>>3-10辺りにでも書いて下さい。
- 544 名前:名無しのスクリプター 投稿日: 2011/04/19(火) 17:43:28
- >>543
ツクールのエディタ上で作る初期データに関しては自分で定義されたinitializeは適用されない。 (エディタ内でデフォルトのinitializeを使ってデータを作成するため) なのでinitializeを使わない書き方にすればOK
def base_maxmp return 500 + @level * 50 end
キャラ毎に成長率変えたい場合はcaseやifで分岐
- 545 名前:名無しのスクリプター 投稿日: 2011/04/19(火) 19:45:50
- 横から追加すると、
$data_actors[1].parameters[6,1] = 99 のように代入してもnilでエラーが出るのは @parameters = Table.new(7,100) が実行されてないからだね。(>544の言うとおり、initializeが動かないから)
Tableクラスは、その[6,1]のような領域外を参照しても、エラーを出さずにnilを返す。 領域外に代入してもエラーを出さない(値が代入もされない)。 Arrayと同じ動作のつもりなんだろうけど、例外吐くべきだよなーこれ。
リファレンス読むとTable#resizeは値を保持しつつサイズを変更するようなので、 parametersをresizeしてから代入するって手もあるよ。試してないけど。
$data_actors[1].parameters.resize(7,1) $data_actors[1].parameters[6,1] = 99
- 546 名前:543 投稿日: 2011/04/20(水) 05:05:02
- >>544-545
おおお、ありがとうございます! そのような原因はまったく想像していなかったので、助かりました……。
また何かあったら聞きにくるかもしれませんが、そのときはよろしくお願いします〜。 ちなみに、少々キャラ数が多いため、>>545氏が提案してくださった方法は まだ試していません。 時間があったらためしてみようかと思います、ありがとうございました。
- 547 名前:543 投稿日: 2011/04/20(水) 08:37:19
- すみません、もう一件詰まったので、できれば答えていただけたらうれしいです……。
教えていただいたように
#-------------------------------------------------------------------------- # ● MaxMP の取得※追加 #-------------------------------------------------------------------------- def maxmp n = [[base_maxmp + @maxmp_plus, 0].max, 999].min n = [[Integer(n), 0].max, 999].min return n end #-------------------------------------------------------------------------- # ● 基本 MaxMP の取得※追加 #-------------------------------------------------------------------------- (省略されました・・全てを読むにはここを押してください)
- 548 名前:名無しのスクリプター 投稿日: 2011/04/20(水) 18:40:34
- def maxsp=(maxsp)のあたりを参考に
- 549 名前:名無しのスクリプター 投稿日: 2011/04/20(水) 20:07:18
- >>547
>セットアップにて「@maxmp=0」ときちんと定義していても、やはり代入できません。 インスタンス変数にはインスタンス自身からしかアクセスできない。
なので、そのインスタンスにアクセスさせるために用意するのがアクセサメソッド。 例えばattr_accessor :maxmpは以下と同義。
def maxmp return @maxmp end
def maxmp=(var) @maxmp = var end
(省略されました・・全てを読むにはここを押してください)
- 550 名前:549 投稿日: 2011/04/21(木) 01:06:10
- あ、えっと、
foo.maxmp = 100 は、
def maxmp=(var) @maxmp = var end
を実行するから、@maxmpには100が代入される。されるんだ。
でも、 p foo.maxmp は、
def maxmp return @maxmp end (省略されました・・全てを読むにはここを押してください)
- 551 名前:543 投稿日: 2011/04/21(木) 02:02:26
- >>548-550
おおおお、ありがとうございました、指摘されなければ アクセサを勘違いしたままで悩み続けているところでした……。 別でincrease_maxmpというアクセサを仮に用意して、 mpの計算式にそれを足すよう組み込んだところ、見事に上手くいきました!
このような質問にも丁寧に答えていただき、ありがとうございました。 指摘されたような部分を踏まえつつ、元のスクリプトを読んで勉強していきたいと思いました。 今回は、本当にありがとうございました!
|