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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0929
roppyakukee複数弾を発射させたいが、一つしか表示されない3解決


roppyakukee

リンク

2013/9/29(Sun) 15:02:20|NO.57457

初歩的な質問で申し訳ありません。
てっつやでミスタイプを確認するのがやっとの状況で
サークルでのサンプルをまかされているので早めにやっておきたいのです・・・

問題が無いと思う部分をカットしていますが、必要であれば全部記載します。

;2(押瞬間) 1(押) 0(無) -1(放瞬間) #module #undef getkey #deffunc getkey var p1,int p2 getkey@hsp key(122),p2 p1=key(122)*2-key(p2) key(p2)=key(122) return #global //各数値初期化// #const double mxhit 23 ;x自機の中心点 #const double myhit 29 ;y #const double armx 14 ;xアーム位置 #const double army 7 ;y #const double armwid 16 ;アーム幅 #const double mhitrad 12.5 ;円形当たり半径 #const double speed 2.0 #const double speedslan 1.0 #const double bullsp 7.0 ;弾丸初速 bullets=10 ddim shot ,bullets ddim shotx,bullets ddim shoty,bullets ddim shots,bullets mxs=double(0):mys=double(0) mx=double(winx/2-45) my=double(winy/2) testdisplay=1 ;デバッグ用 //◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆// //メインループ// *main redraw 0 gosub*getver gosub*player gosub*drow //gosub*getfps redraw 1:await 16 goto*main //□ □ □ □ □ □ □ □ □ □ □ □ // //変数更新// *getver getkey wkey,87 getkey skey,83 getkey akey,65 getkey dkey,68 getkey enter,13 if fade=1 or fadelv=0 :fadelv+=1 :fade=1 if fade=0 or fadelv=100 :fadelv-=1 :fade=0 return //プレイヤー// *player mxs=0:mys=0 if wkey=1 :mys=-speed if skey=1 :mys= speed if akey=1 :mxs=-speed if dkey=1 :mxs= speed if speed=absf(mxs)&speed=absf(mys) :mxs=mxs*speedslan:mys=mys*speedslan mx+=mxs:my+=mys ;射撃 if enter>0 :shottime++ :else:if shottime=0 foreach shot if shot(cnt)=0 & shottime\15=0 & enter>0{ shot(cnt)=1 shotx(cnt)=mx+armx shoty(cnt)=my+army shots(cnt)=-bullsp-(mys*-1) break} loop foreach shot if shot(cnt)=1 { shoty(cnt)+=shots(cnt) if shoty(cnt)<-10 :shot(cnt)=0 } loop ;壁衝突(矩形判定) if mx+mxhit-mhitrad<winx/windiv :mx=winx/windiv-mxhit+mhitrad if mx+mxhit+mhitrad>winx-winx/windiv:mx=winx-winx/windiv-mxhit-mhitrad if my+myhit-mhitrad<0 :my=0-myhit+mhitrad if my+myhit+mhitrad>winy:my=winy-myhit-mhitrad diskabe=absf(sqrt(pow((mx+mxhit)-winx/windiv,2)+pow((my+myhit),2))) return



この記事に返信する


暇人

リンク

2013/9/29(Sun) 16:31:32|NO.57458

>問題が無いと思う部分をカットしていますが、必要であれば全部記載します。
コピペして動くようにしないと、こちらで動くように修正する必要が出るんですが・・・

> ddim shot ,bullets
ここで実数型で確保してるのに
弾発射時に
> shot(cnt)=1
整数型を代入してるので整数型に初期化され
配列が無くなってる

最初の確保を整数型にするか、代入を実数にすれば良い



roppyakukee

リンク

2013/9/29(Sun) 16:43:04|NO.57459

あ、それで無効化していたんですね。

shot(cnt)=0

shot(cnt)=1
の部分をそれぞれ小数点まで指定してやると連射できました!
if分内では整数値で、代入時には小数点まで・・・
今後気を付けます。



asdf

リンク

2013/9/29(Sun) 19:41:47|NO.57463

もしshot変数を弾の存在フラグとして使っているのであれば
shotに入れる数値を小数点まで指定するより
宣言をddimからdim(「ddim shot,bullets」から「dim shot,bullets」)
にするべきではないでしょうか

そうすればshot変数が確保する領域も半分で済みますし
処理も大差ないと思いますが早くなると思います
何より、プログラムの可読性が増します
(実数型だと瞬時にフラグ用変数だと気づけない)


フラグとして使ってないのであればスルーしてください
以上憶測で長々と失礼しました



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