HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0408
クリスアクションゲームを作っているのですが6解決


クリス

リンク

2009/4/8(Wed) 20:38:59|NO.24506

結構初歩的な質問ですが
ジャンプの処理をするときに
以下のスクリプトを組んでみました

・・・(一部略)

; d ジャンプしているかどうか ; mjm ジャンプする直前の[psy] ; jm=0 ; ジャンプの高度、最大は80 ; c 上昇中かどうか ;  psy プレイヤーのY座標 if d=0 : mjm=psy ;ジャンプ開始、[mjm]に[psy]を記録 d=1;ジャンプ開始 if (jm=0)|(c=1) :jm+10:c=1:;高度0あるいは、上昇中で、高度を10上げる if (jm>=80)|(c=0) : jm-10:c=0 :;高度80なら状態を[下降]にして、高度を10下げる jm+mjm=psy : jm-1;[現在の高度]+[着地時の{psy}]=[現在の位置] if psy=mjm :d=0 ; 現在の位置と、着地時の[psy]が同じなら、ジャンプ終了 return
・・・

という物を組んでみましたが
画面内に反映されているのか無いのか、
キャラクターが飛びません

何かおかしなところがあれば教えてくれると助かります



この記事に返信する


ORZ

リンク

2009/4/8(Wed) 20:52:23|NO.24508


jm+mjm=psy


psy=jm+mjim
まず変数の代入の仕方から勉強しような。
このような文法がソースのほかのところにもあるかもしれない。
あと、ココを修正したからといって、ジャンプしない問題が解決するとは限らない。
一部抜粋ではコチラで全く再現不可能。とりあえず、このスクリプトには上記の誤りがありましたと。



ORZ

リンク

2009/4/8(Wed) 20:56:10|NO.24509

あと、よくわからんjim-1のせいで

if psy=mjm :d=0 ; 現在の位置と、着地時の[psy]が同じなら、ジャンプ終了

これが満たせないような気がするんだけど・・・



SYAM

リンク

2009/4/8(Wed) 22:43:20|NO.24514

ジャンプに関する質問と回答はこれまでにも何度か出てきてますから、検索してみるといいでしょう。
多分このままだと、よしんば動いたとしてもジャンプらしからぬ動きになると思います。。。


※ファミコンの「東海道五十三次」みたいな。



クリス

リンク

2009/4/8(Wed) 22:46:31|NO.24515

ORZさん
ありがとうございます
無事解決しました

それと
jim-1のことですが
どういうわけか、これがないと
jim+11
になってしまい
色々と誤差が出るため

とりあえず、jim-1 を応急処置として、入れました



?

リンク

2009/4/9(Thu) 01:06:56|NO.24519

東海道五十三次www



SYAM

リンク

2009/4/9(Thu) 10:40:12|NO.24520

余談。
「どういうわけか」のところが一体どういうわけでそうなってるのか、という話です。

"論理式"といって、等式や不等式には

成り立っていれば、その式の部分は 1 という値になる。 成り立っていなければ、その式の部分は 0 という値になる。
…という性質があります。たとえば、

 b=(a=5)

という計算の実行結果は、
 a=4以下 のとき、b は 0 になります。
 a=5 のとき、b は 1 になります。
 a=6以上 のとき、b は 0 になります。

これを踏まえて…

ORZさんの指摘どおり、変数への代入は
(代入される変数) = (代入する値)

…のように書かないといけません。 (代入される変数) の次に = ではなく +,-,*,/ …のような演算子が書かれていると、違う意味になります。 ちょうど問題の箇所のすぐあとに書いている jm-1 のように、その変数に足したり引いたりという操作をする意味になってしまいます。 そう考えると…、
jm+mjm=psy
は、

jm + (mjm=psy)
こういう意味です。
つまり、 mjm と psy が同じ値のとき、この計算式は jm に 1 を足す、という意味になっているわけです。



ONION software Copyright 1997-2023(c) All rights reserved.