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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0312
YamaR94スプライトの挙動が変2解決


YamaR94

リンク

2009/3/12(Thu) 19:55:12|NO.23839

hspdxfixでSTGを作ったんですが、スプライトの一部が変な挙動をします。
というのも、設定するはずのない高速度で飛んでいくのです。

同じルーティンから作られたスプライトが、一部は正常に動き、一部は異常な速度で飛んでいって、また角度がおかしいものも発生してしまいます。

長くなったスクリプトを編集して短くしたものを貼っておきます。
それでも200行くらいあります・・・ごめんなさい。長すぎるかも知れません。

;1.directxの設定 randomize #include "hspdxfix.as" dialog "フルスクリーンで起動しますか?",2,"Config" if stat=6:screenmode=0 if stat=7:screenmode=1 windowx=800:windowy=600;画面サイズ指定 es_ini 5000,99,360;初期化 es_screen windowx,windowy,16,0,screenmode,1;画面作る if stat=1 : goto *error1 if stat=2 : goto *error2 es_cls goto *start *error1 dialog "DirectXの初期化に失敗しました",1:end *error2 dialog "スクリーンの初期化に失敗しました",1:end *error3 es_bye : wait 100 dialog "VRAMの容量が不足しています。",1:end ;2.キャラクタ設定 *start es_area 0,-100,800,700 es_window 150,0,650,600 ;画像を使わないために白塗りにします buffer 1,400,600,0 color 255,255,255 boxf 0,0,400,600 es_buffer 0,0;オフクスリーンバッファに白塗りを読み込みます。 if stat=1 : goto *error3 ;白塗りの切抜きがキャラクタになります es_size 32,32,15,0 es_pat 0,0,0;0=自分 es_size 33,69,100,0 es_pat 4,39,64,0;6=敵4 es_size 5,29,100,0 es_pat 101,0,132,0;101=弾1 es_size 5,18,75,0 es_pat 102,5,132,0;102=弾2 es_set 0,600,400,0,,5 es_type 0,1 ;3.各種変数設定 time=0;時間 mx=384;自分の出現位置X my=550;上同Y mm=5;自分移動 ms=10;自分HP score=0 wmax=10;自分の弾 dim wx,wmax;X軸 dim wy,wmax;Y軸 dim wf,wmax;オンオフ emax=50;敵 dim ex,emax;X座標 dim ey,emax;Y座標 dim exl,emax;X座標log dim eyl,emax;Y座標log dim en,emax;種類 dim es,emax;敵HP dim exm,emax;X軸方向移動 dim eym,emax;Y軸方向移動 dim et,emax;出現からの時間 dim el,emax;形態 ewmax=2000;敵の弾 dim ewn,ewmax dim ewx,ewmax;X軸 dim ewy,ewmax;Y軸 dim ewang,1001+ewmax;移動方向 dim ews,1001+ewmax;オンオフ dim ewl,1001+ewmax;形態 en(1)=4 es(1)=10000 ex(1)=400 ey(1)=100 et(1)=0 es_set 1+1,ex(1),ey(1),en(1),1,4 es_type 1+1,2 stage=1 es_cls *top cls 4 ;メインルーチン *main redraw 2 gosub *myship;2,自分を動かす gosub *emove2 color 0,0,255 es_boxf 150,0,650,600 gosub *meter;,メーターを動かす es_draw ,,,1 es_sync await 1 es_cls redraw 1 goto *main ;2,自分を動かす *myship if ms<=0:return mxl=mx:myl=my stick pat,79 xm=(pat>>2&1)-(pat&1) ym=(pat>>3&1)-(pat>>1&1) getkey slow,16:if slow=1:mm=mm-3 mx=xm*mm+mx:my=my+ym*mm if mx<134:mx=134 if my<-16:my=-16 if mx>634:mx=634 if my>584:my=584 ;es_ang mxl,myl,mx,my ;mangle=stat es_pos 0,mx,my ;es_effect 0,,,,,mangle,,, mm=5 new=0 getkey shot,90 if shot=0:return es_exnew new,101,1000,1 if new=-1:return es_set new,mx+13,my+32,101,1,6 es_adir new,180,2000 es_type new,1 es_effect new,,,,,180,90,0, return *emove2 repeat emax if es(cnt)<=0:continue ;if cnt=0:continue cnt5=cnt if en(cnt5)=4 { if tim\100!0:continue random3=rnd(360) cnt2=cnt5 es_exnew new,1001,1001+ewmax,1 if new=-1:continue es_set new,ex(cnt2),ey(cnt2),102,1,4 es_adir new,random3,(rnd(3)+1)*100 ewang(new)=random3 ews(new)=1 es_type new,3 es_effect new,,,,,ewang(new),,, } loop return *meter;3,メーターを動かす time=time+1 getkey bye,8:if bye=1:end if ms<=0:end return
異常高速度の弾は下に、角度がおかしい弾は右上に現れるみたいです。

どこを改善したらいいか教えてください。お願いしますm(_ _)m



この記事に返信する


f(浮言中)

リンク

2009/3/12(Thu) 21:00:44|NO.23840

random3の値が
13,15,16,18,19,20,21,22 この辺が早くなり
11,12,14,17,23 この辺が右に飛ぶようだな。

なんかバグっぽいが・・・とりあえず方向360の設定にしているが、
方向を256にすると、とりあえず出ないようだ。



YamaR94

リンク

2009/3/12(Thu) 23:44:09|NO.23846

回答ありがとうございます。
編集済みのほうで256にしてみて異常弾が出なかったので、本編のほうにいれてやってみたところ、本編でも異常弾が見受けられませんでした。

とりあえず異常がなくなったようなので解決にさせていただきます。



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