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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1020
甘酒エラーが出ます4解決


甘酒

リンク

2012/10/20(Sat) 16:41:42|NO.50098

以下のソースコードで、101行目「パラメータしきの〜」が出ます
特別おかしいところは見当たらないのですが・・・

randomize screen 0,640,480 buffer 1:picload "data//reimu.png" buffer 2:picload "data//shot.png" gsel 0 //変数 x = 200.0 y = 200.0 frame = 0 cgx = 36//霊夢グラフィックgcopy時のx起点 cgy = 48//y起点 cgdx = 0//霊夢のgmode時のコピーサイズx cgdy = 0//yサイズ maxbullet = 100//画面内に表示する弾の最大 //配列変数 dim b,maxbullet//今、弾が存在しているか? dimtype b_x,vartype("double"),maxbullet//敵弾座標x dimtype b_y,vartype("double"),maxbullet//敵弾座標y dimtype b_vx,vartype("double"),maxbullet//敵弾x速度 dimtype b_vy,vartype("double"),maxbullet//敵弾y速度 *main //めいん color 255,255,255 boxf x = limitf(x,0,615) y = limitf(y,0,470) //自機の移動 stick key,15 if key&1 : x = x - 2:cgdx = 0:cgdy = 48 if key&2 : y = y - 2 if key&4 : x = x + 2:cgdx = 0:cgdy = 98 if key&8 : y = y + 2 //1秒に一回弾を表示 if(frame\60 == 1){ gosub *search if(number != -1){ b(number) = 1 b_x(number) = 50.0 b_y(number) = 200.0 b_vx(number) = 1.0 b_vy(number) = -0.5 } } //自機の表示 pos x-18,y-24 gmode 0,cgx,cgy gcopy 1,cgdx,cgdy //移動に使う値を初期化 cgx = 36 cgy = 48 cgdx = 0 cgdy = 0 //弾の表示 repeat maxbullet if ( b(cnt) == 1){ b_x(cnt) = b_x(cnt) + b_vx(cnt) b_y(cnt) = b_y(cnt) + b_vy(cnt) pos b_x(cnt)-8,b_y(cnt)-8 gmode 0,16,15 gcopy 2,0,14 } loop //フレームの表示 color 0,0,0 pos 0,0 mes frame //画面を更新して*mainへループ redraw 1 redraw 0 await 16 frame++ goto*main *search number = -1 repeat maxbullet if( b(cnt) ! =1) number = cnt:return loop return



この記事に返信する


ヂオン

リンク

2012/10/20(Sat) 17:49:48|NO.50100

>> if(b(cnt)!=1)

にしたら、大丈夫です。『! =』 の様に、間にスペースが入っているのが原因っぽい。



甘酒

リンク

2012/10/20(Sat) 17:54:25|NO.50101

ごめんなさい。自己解決しました。
repeatループ中にreturnしてしまったことが問題のようです。



てれてれ

リンク

2012/10/20(Sat) 17:55:55|NO.50102

色々おかしいです。
if( b(cnt) ! =1) number = cnt:return

まず[!]と[=]の間にスペースがあります。くっつけて下さい。

if( b(cnt) != 1 ) number = cnt:return

次に( b(cnt) ! =1 )とnumber = cntが繋がっちゃってます。
そういう書き方をしたいなら間に[:]を入れて下さい。(波括弧を使う方法もあります)

if( b(cnt) != 1 ) : number = cnt:return

さらにループ中にreturnで戻るのはrepeatのネストレベルが上がってしまってエラーの発生に繋がります。
repeat-loopを抜ける時にはbreakを使って下さい。

if( b(cnt) != 1) : number = cnt : break

もう少し基本的な事を勉強された方がいいかもしれません。



ヂオン

リンク

2012/10/20(Sat) 17:59:46|NO.50103

追記

色々調べたところ、下記の情報にたどり着きました。

ヘルプから参照できる
hsp3 プログラミングマニュアルの式の項内の 『HSPで利用できる演算子 一覧』のグラフをよく読んでみると。

『!=』『>=』『<=』『>>』『<<』等は 一組で、一つの演算子であるというニュアンスが有ります。
自分も今まで気にしていませんでしたが、もしかしたら、こういうことなのかもしれません。



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