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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0426
イヤホンobaqのmainobjを端にいかない、かつ荒ぶらないようにしたい8解決


イヤホン

リンク

2014/4/26(Sat) 16:52:03|NO.61695

mainobjが荒ぶるのですが、直すにはどうすればいいか分かりません。
どうか、教えていただけると助かります

pre
#include obaq.as
#define wxs 760.0 ; wxs = 画面の横の長さ
#define wys 400.0 ; wys = 画面の縦の長さ 
#define cxs 32.0 ; cxs = 画像を縦に分割する長さ
#define cys 32.0 ; cys = 画像を横に分割する長さ

ステータス画面1
screen 0,350,240,0,5,5 title Status Window(enemy)
ステータス画面2
screen 3,350,40,0,0,277 title Status Window(player)
obaq画面
screen 2,wxs,wys,0,365.0,0 title obaq Window

変数初期化
px = 160 py = 80 ; 赤い点のオブジェクトの座標
px_e = 0.0 py_e = 0.0 ; オブジェクト座標変換用
pspeed = 0.3 pspeed0 = -0.3 ; pspeed = 本体の速さ

オブジェクト管理用変数
内訳 
(0) = フラグ
(1) = オブジェクトID
(2) = 座標x(画面)
(3) = 座標y(画面)
(4) = 角度(内部)
ddim obj ,5 ,16
repeat length2(obj)
obj(0,cnt) = -1.0 ,0.0 ,0.0 ,0.0 ,0.0
loop

obaq システム設定 
qreset
qborder -96.0 ,-51.0 ,106.0 ,51.0 ; 横幅の右側のみサイズ可変
qgravity 0.0 ,0.0

赤いオブジェクト(発射地点表示)
qcnvaxis px_e ,py_e ,px ,py ,1 座標変換 画面座標から obaq 座標に変換
qaddpoly mainobj ,4 ,px_e ,py_e ,0.0 ,5.0 ,5.0 ,0 ,1 ,2
qtype mainobj ,type_bindR

メインループ開始
main
qgetpos mainobj ,px ,py ,pr
qcnvaxis px_e ,py_e ,px ,py ,1
qgetspeed mainobj ,pxsp ,pysp ,prsp

time++

キー入力処理
gosub key_input

赤い点のオブジェクトから
if ((ky&16)!0)&(time20 = 0) { gosub objcreate }

オブジェクト範囲外処理
gosub object_out_of_range

gosub mainobject_out_of_range

qexec
gosub ObjectExec オブジェクトデータ管理更新
gosub status_enemy_window_redraw
gosub status_player_window_redraw
redraw 0
color boxf
qdraw 0
redraw 1
await 16
goto main

キー入力処理
key_input
stick ky,31
if ky&128 { end }
if ( px = 3 )&( px = 185 )&( py = 3 )&( py = 97 ){
if ky&1 {
qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,1
if ky&2 { qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,0 }
if ky&4 { qspeed mainobj ,pspeed ,0.0 ,0.0 ,0 }
if ky&8 { qspeed mainobj ,0.0 ,pspeed ,0.0 ,0 }
}
if ky&2 {
qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,1
if ky&1 { qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,0 }
if ky&4 { qspeed mainobj ,pspeed ,0.0 ,0.0 ,0 }
if ky&8 { qspeed mainobj ,0.0 ,pspeed ,0.0 ,0 }
}
if ky&4 {
qspeed mainobj ,pspeed ,0.0 ,0.0 ,1
if ky&1 { qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,0 }
if ky&2 { qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,0 }
if ky&8 { qspeed mainobj ,0.0 ,pspeed ,0.0 ,0 }
}
if ky&8 {
qspeed mainobj ,0.0 ,pspeed ,0.0 ,1
if ky&1 { qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,0 }
if ky&2 { qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,0 }
if ky&4 { qspeed mainobj ,pspeed ,0.0 ,0.0 ,0 }
}
if ( (ky&1)=0 )&( (ky&2)=0 )&( (ky&4)=0 )&( (ky&8)=0 ) { qspeed mainobj ,0.0 ,0.0 ,0.0 ,1 }
}
return

ステータスウィンドウ1の更新
status_enemy_window_redraw
gsel 0
redraw 0
color boxf color ,255
pos 0,0 mesID
pos 80,0 mesX座標
pos 170,0 mes Y座標
pos 260,0 mes 角度(ラジアン)
line 0,18,350,18
line 0,220,350,220
pos 0,222 mes オブジェクト管理有効最大数 +ActiveObjectMax+ (+length2(obj)+)
chc = 0
repeat length2(obj)
表示の座標・角度はすべて内部座標です。
if ( obj(0,cnt) = -1) { continue }
pos 0,chc20+20 mes (+cnt+) +int(obj(1,cnt))
pos 80,chc20+20 mes +obj(2,cnt)
pos 170,chc20+20 mes +obj(3,cnt)
pos 260,chc20+20 mes +obj(4,cnt)
chc++
if chc = 10 { break }
loop

redraw 1
gsel 2
return

ステータスウィンドウ2の更新
status_player_window_redraw
gsel 3
redraw 0
color boxf color ,255
pos 0, 0 mesID
pos 80 ,0 mesX座標
pos 170 ,0 mes Y座標
pos 260 ,0 mes 角度(ラジアン)
line 0 ,18 ,350 ,18
pos 0,20 mes mainobj
pos 80,20 mes px
pos 170 ,20 mes py
pos 260 ,20 mes 0.0
redraw 1
gsel 2

return

オブジェクト管理データを更新
ObjectExec
ActiveObjectMax = 0
repeat length2(obj)
if ( obj(0,cnt) = -1.0 ) { continue }
qgetpos int(obj(1,cnt)) ,obj(2,cnt) ,obj(3,cnt) ,obj(4,cnt)
ActiveObjectMax++
loop
return

オブジェクト管理から空きを探す
ObjectEmpty
TrueEmpty = -1
repeat length2(obj)
if ( obj(0,cnt) = -1.0 ) { TrueEmpty = cnt break }
loop
if ( TrueEmpty != -1 ) { return }

obj(0,length2(obj)) = -1.0 ,0.0 ,0.0 ,0.0, 0.0
TrueEmpty = length2(obj) - 1
return

緑のオブジェクトの生成と発射処理
objcreate
gosub ObjectEmpty
qcnvaxis px_e ,py_e ,px ,py ,1
_TempObj = -1
qaddpoly _TempObj ,4 ,px ,py , ,5 ,5 , ,2 ,1 ; 出現処理(チェックを含む為、一時的にIDを格納)
if _TempObj 0 { return }
obj(0,TrueEmpty) = 1.0 ,double(_TempObj) ,px_e ,py_e ,0.0

弾のタイプ
qtype int(obj ( 1 ,TrueEmpty ) ) ,type_bindY
qtype int(obj ( 1 ,TrueEmpty ) ) ,type_bindR

qpush int(obj(1,TrueEmpty)) , , ,7.5 ,0 ; オブジェクトの射出スピードを指定
return

object_out_of_range
repeat length2(obj)
if ( obj(0,cnt) = -1.0) { continue }
qgetpos obj(1,cnt) ,obj(2,cnt) ,obj(3,cnt) ,obj(4,cnt)
if ( obj(2,cnt) = 190.0 ) { qdel int(obj(1,cnt)) obj(0,cnt) = -1.0 } 画面座標 x.760 を超えると消去
loop
return

mainobject_out_of_range
if ( px 3 )( px 185 )( py 3 )( py 97 ) { qspeed mainobj ,0.0 ,0.0 ,0.0 ,1 }
if ( px 3 ) { qpos mainobj ,3 ,py ,0.0 }
if ( px 185 ) { qpos mainobj ,185 ,py ,0.0 }
if ( py 3 ) { qpos mainobj ,px ,3 ,0.0 }
if ( py 97 ) { qpos mainobj ,px ,97 ,0.0 }
return
pre



この記事に返信する


イヤホン

リンク

2014/4/26(Sat) 16:53:16|NO.61696

書き直し



イヤホン

リンク

2014/4/26(Sat) 16:54:49|NO.61697

ソース


#include obaq.as #define wxs 760.0 ; wxs = 画面の横の長さ #define wys 400.0 ; wys = 画面の縦の長さ  #define cxs 32.0 ; cxs = 画像を縦に分割する長さ #define cys 32.0 ; cys = 画像を横に分割する長さ ステータス画面1 screen 0,350,240,0,5,5 title Status Window(enemy) ステータス画面2 screen 3,350,40,0,0,277 title Status Window(player) obaq画面 screen 2,wxs,wys,0,365.0,0 title obaq Window 変数初期化 px = 160 py = 80 ; 赤い点のオブジェクトの座標 px_e = 0.0 py_e = 0.0 ; オブジェクト座標変換用 pspeed = 0.3 pspeed0 = -0.3 ; pspeed = 本体の速さ オブジェクト管理用変数 内訳  (0) = フラグ (1) = オブジェクトID (2) = 座標x(画面) (3) = 座標y(画面) (4) = 角度(内部) ddim obj ,5 ,16 repeat length2(obj) obj(0,cnt) = -1.0 ,0.0 ,0.0 ,0.0 ,0.0 loop obaq システム設定  qreset qborder -96.0 ,-51.0 ,106.0 ,51.0 ; 横幅の右側のみサイズ可変 qgravity 0.0 ,0.0 赤いオブジェクト(発射地点表示) qcnvaxis px_e ,py_e ,px ,py ,1 座標変換 画面座標から obaq 座標に変換 qaddpoly mainobj ,4 ,px_e ,py_e ,0.0 ,5.0 ,5.0 ,0 ,1 ,2 qtype mainobj ,type_bindR メインループ開始 main qgetpos mainobj ,px ,py ,pr qcnvaxis px_e ,py_e ,px ,py ,1 qgetspeed mainobj ,pxsp ,pysp ,prsp time++ キー入力処理 gosub key_input 赤い点のオブジェクトから if ((ky&16)!0)&(time20 = 0) { gosub objcreate } オブジェクト範囲外処理 gosub object_out_of_range gosub mainobject_out_of_range qexec gosub ObjectExec オブジェクトデータ管理更新 gosub status_enemy_window_redraw gosub status_player_window_redraw redraw 0 color boxf qdraw 0 redraw 1 await 16 goto main キー入力処理 key_input stick ky,31 if ky&128 { end } if ( px = 3 )&( px = 185 )&( py = 3 )&( py = 97 ){ if ky&1 { qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,1 if ky&2 { qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,0 } if ky&4 { qspeed mainobj ,pspeed ,0.0 ,0.0 ,0 } if ky&8 { qspeed mainobj ,0.0 ,pspeed ,0.0 ,0 } } if ky&2 { qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,1 if ky&1 { qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,0 } if ky&4 { qspeed mainobj ,pspeed ,0.0 ,0.0 ,0 } if ky&8 { qspeed mainobj ,0.0 ,pspeed ,0.0 ,0 } } if ky&4 { qspeed mainobj ,pspeed ,0.0 ,0.0 ,1 if ky&1 { qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,0 } if ky&2 { qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,0 } if ky&8 { qspeed mainobj ,0.0 ,pspeed ,0.0 ,0 } } if ky&8 { qspeed mainobj ,0.0 ,pspeed ,0.0 ,1 if ky&1 { qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,0 } if ky&2 { qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,0 } if ky&4 { qspeed mainobj ,pspeed ,0.0 ,0.0 ,0 } } if ( (ky&1)=0 )&( (ky&2)=0 )&( (ky&4)=0 )&( (ky&8)=0 ) { qspeed mainobj ,0.0 ,0.0 ,0.0 ,1 } } return ステータスウィンドウ1の更新 status_enemy_window_redraw gsel 0 redraw 0 color boxf color ,255 pos 0,0 mesID pos 80,0 mesX座標 pos 170,0 mes Y座標 pos 260,0 mes 角度(ラジアン) line 0,18,350,18 line 0,220,350,220 pos 0,222 mes オブジェクト管理有効最大数 +ActiveObjectMax+ (+length2(obj)+) chc = 0 repeat length2(obj) 表示の座標・角度はすべて内部座標です。 if ( obj(0,cnt) = -1) { continue } pos 0,chc20+20 mes (+cnt+) +int(obj(1,cnt)) pos 80,chc20+20 mes +obj(2,cnt) pos 170,chc20+20 mes +obj(3,cnt) pos 260,chc20+20 mes +obj(4,cnt) chc++ if chc = 10 { break } loop redraw 1 gsel 2 return ステータスウィンドウ2の更新 status_player_window_redraw gsel 3 redraw 0 color boxf color ,255 pos 0, 0 mesID pos 80 ,0 mesX座標 pos 170 ,0 mes Y座標 pos 260 ,0 mes 角度(ラジアン) line 0 ,18 ,350 ,18 pos 0,20 mes mainobj pos 80,20 mes px pos 170 ,20 mes py pos 260 ,20 mes 0.0 redraw 1 gsel 2 return オブジェクト管理データを更新 ObjectExec ActiveObjectMax = 0 repeat length2(obj) if ( obj(0,cnt) = -1.0 ) { continue } qgetpos int(obj(1,cnt)) ,obj(2,cnt) ,obj(3,cnt) ,obj(4,cnt) ActiveObjectMax++ loop return オブジェクト管理から空きを探す ObjectEmpty TrueEmpty = -1 repeat length2(obj) if ( obj(0,cnt) = -1.0 ) { TrueEmpty = cnt break } loop if ( TrueEmpty != -1 ) { return } obj(0,length2(obj)) = -1.0 ,0.0 ,0.0 ,0.0, 0.0 TrueEmpty = length2(obj) - 1 return 緑のオブジェクトの生成と発射処理 objcreate gosub ObjectEmpty qcnvaxis px_e ,py_e ,px ,py ,1 _TempObj = -1 qaddpoly _TempObj ,4 ,px ,py , ,5 ,5 , ,2 ,1 ; 出現処理(チェックを含む為、一時的にIDを格納) if _TempObj 0 { return } obj(0,TrueEmpty) = 1.0 ,double(_TempObj) ,px_e ,py_e ,0.0 弾のタイプ qtype int(obj ( 1 ,TrueEmpty ) ) ,type_bindY qtype int(obj ( 1 ,TrueEmpty ) ) ,type_bindR qpush int(obj(1,TrueEmpty)) , , ,7.5 ,0 ; オブジェクトの射出スピードを指定 return object_out_of_range repeat length2(obj) if ( obj(0,cnt) = -1.0) { continue } qgetpos obj(1,cnt) ,obj(2,cnt) ,obj(3,cnt) ,obj(4,cnt) if ( obj(2,cnt) = 190.0 ) { qdel int(obj(1,cnt)) obj(0,cnt) = -1.0 } 画面座標 x.760 を超えると消去 loop return mainobject_out_of_range if ( px 3 )( px 185 )( py 3 )( py 97 ) { qspeed mainobj ,0.0 ,0.0 ,0.0 ,1 } if ( px 3 ) { qpos mainobj ,3 ,py ,0.0 } if ( px 185 ) { qpos mainobj ,185 ,py ,0.0 } if ( py 3 ) { qpos mainobj ,px ,3 ,0.0 } if ( py 97 ) { qpos mainobj ,px ,97 ,0.0 } return



kanahiron

リンク

2014/4/26(Sat) 17:50:21|NO.61698

"(ダブルクオーテーション)や*(アスタリスク)、:(コロン)
がないのはなんででしょう?
動くように修正するだけですごい手間です(´・ω・`)



GENKI

リンク

2014/4/26(Sat) 17:53:49|NO.61699

入れるべき記号(;:")が入っていない箇所が多数あります。
少しならこちらで修正して調べてみようと思ったのですが、さすがに多すぎてだめでした。
ソースコピペで実行できる形に修正していただけないでしょうか。



YSR

リンク

2014/4/26(Sat) 18:59:06|NO.61700

パターンが決まっていれば正規表現置換でなんとか……なりませんでした(´・ω・`)
とりあえず手直し+αしたものを置いておきますね

// プリプロセッサ #include "obaq.as" #define wxs 760.0 ;画面の横の長さ #define wys 400.0 ;画面の縦の長さ #define cxs 32.0 ;画像を縦に分割する長さ #define cys 32.0 ;画像を横に分割する長さ // 画面作成 screen 0, 350, 240, 0, 5, 5 :title "Status Window(enemy)" ;ステータス画面1 screen 3, 350, 40, 0, 0, 277 :title "Status Window(player)";ステータス画面2 screen 2, wxs, wys, 0, 365.0, 0 :title "obaq Window" ;obaq画面 ;【ミス】11行目で「365.0」と小数点を付ける必要はない // 変数初期化 px = 160 :py = 80 ;赤い点のオブジェクトの座標 px_e = 0.0 :py_e = 0.0 ;オブジェクト座標変換用 pspeed = 0.3 :pspeed0 = -0.3 ;本体の速さ // オブジェクト管理用変数 /* 内訳 (0) = フラグ (1) = オブジェクトID (2) = 座標x(画面) (3) = 座標y(画面) (4) = 角度(内部) */ ddim obj ,5 ,16 repeat length2(obj) obj(0, cnt) = -1.0, 0.0, 0.0, 0.0, 0.0 loop // obaq システム設定 qreset qborder -96.0 ,-51.0 ,106.0 ,51.0 ;横幅の右側のみサイズ可変 qgravity 0.0 ,0.0 // 赤いオブジェクト(発射地点表示) qcnvaxis px_e ,py_e ,px ,py ,1 ;画面座標からobaq座標に変換 qaddpoly mainobj ,4 ,px_e ,py_e ,0.0 ,5.0 ,5.0 ,0 ,1 ,2 qtype mainobj ,type_bindR // メインループ開始 *main qgetpos mainobj ,px ,py ,pr qcnvaxis px_e ,py_e ,px ,py ,1 qgetspeed mainobj ,pxsp ,pysp ,prsp time++ // キー入力処理 gosub *key_input // 赤い点のオブジェクトから if(((ky & 16) != 0) && (time20 == 0)) :gosub *objcreate // オブジェクト範囲外処理 gosub *object_out_of_range gosub *mainobject_out_of_range qexec gosub *ObjectExec ;オブジェクトデータ管理更新 gosub *status_enemy_window_redraw gosub *status_player_window_redraw redraw 0 color :boxf qdraw 0 redraw 1 await 16 goto *main // キー入力処理 *key_input stick ky, 31 if(ky & 128) :end if((px == 3) && (px == 185) && (py == 3) && (py == 97)){ ;【ミス】矛盾した論理式 if(ky & 1){ qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,1 if(ky & 2) :qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,0 if(ky & 4) :qspeed mainobj ,pspeed ,0.0 ,0.0 ,0 if(ky & 8) :qspeed mainobj ,0.0 ,pspeed ,0.0 ,0 } if(ky & 2){ qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,1 if(ky & 1) :qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,0 if(ky & 4) :qspeed mainobj ,pspeed ,0.0 ,0.0 ,0 if(ky & 8) :qspeed mainobj ,0.0 ,pspeed ,0.0 ,0 } if(ky & 4){ qspeed mainobj ,pspeed ,0.0 ,0.0 ,1 if(ky & 1) :qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,0 if(ky & 2) :qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,0 if(ky & 8) :qspeed mainobj ,0.0 ,pspeed ,0.0 ,0 } if(ky & 8){ qspeed mainobj ,0.0 ,pspeed ,0.0 ,1 if(ky & 1) :qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,0 if(ky & 2) :qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,0 if(ky & 4) :qspeed mainobj ,pspeed ,0.0 ,0.0 ,0 } if(((ky & 1) == 0) && ((ky & 2) == 0) && ((ky & 4) == 0) && ((ky & 8) == 0)) :qspeed mainobj ,0.0 ,0.0 ,0.0 ,1 } return // ステータスウィンドウ1の更新 *status_enemy_window_redraw gsel 0 redraw 0 color :boxf :color ,,255 pos 0, 0 :mes "ID" pos 80, 0 :mes "X座標" pos 170, 0 :mes "Y座標" pos 260, 0 :mes "角度(ラジアン)" line 0, 18, 350, 18 line 0, 220, 350, 220 pos 0,222 :mes "オブジェクト管理有効最大数 " + ActiveObjectMax +" (" + length2(obj) + ")" chc = 0 repeat length2(obj) // 表示の座標・角度はすべて内部座標です。 if(obj(0, cnt) == -1) :continue pos 0, chc20 + 20 :mes "(" + cnt + ") " + int(obj(1,cnt)) ;【疑問】intにする意味は? pos 80, chc20 + 20 :mes "" + obj(2, cnt) ;【疑問】"" + を付ける意味は? pos 170, chc20 + 20 :mes "" + obj(3, cnt) pos 260, chc20 + 20 :mes "" + obj(4, cnt) chc++ if(chc == 10) :break loop redraw 1 gsel 2 return // ステータスウィンドウ2の更新 *status_player_window_redraw gsel 3 redraw 0 color :boxf :color ,,255 pos 0, 0 :mes "ID" pos 80 ,0 :mes "X座標" pos 170 ,0 :mes "Y座標" pos 260 ,0 :mes "角度(ラジアン)" line 0 ,18 ,350 ,18 pos 0, 20 :mes mainobj pos 80, 20 :mes px pos 170 ,20 :mes py pos 260 ,20 :mes 0.0 ;【疑問】引用符で囲っていない? redraw 1 gsel 2 return // オブジェクト管理データを更新 *ObjectExec ActiveObjectMax = 0 repeat length2(obj) if(obj(0, cnt) == -1.0) :continue qgetpos int(obj(1, cnt)), obj(2,cnt), obj(3,cnt), obj(4,cnt) ActiveObjectMax++ loop return // オブジェクト管理から空きを探す *ObjectEmpty TrueEmpty = -1 repeat length2(obj) if(obj(0, cnt) == -1.0) :TrueEmpty = cnt :break loop if(TrueEmpty != -1) :return obj(0, length2(obj)) = -1.0 ,0.0 ,0.0 ,0.0, 0.0 ;【疑問】これって初期化しているの? TrueEmpty = length2(obj) - 1 return // 緑のオブジェクトの生成と発射処理 *objcreate gosub *ObjectEmpty qcnvaxis px_e, py_e, px, py, 1 _TempObj = -1 qaddpoly _TempObj, 4, px, py,, 5, 5,, 2, 1 ;出現処理(チェックを含む為、一時的にIDを格納) if(_TempObj 0) :return ;【ミス】比較演算子が抜けている obj(0, TrueEmpty) = 1.0, double(_TempObj), px_e, py_e, 0.0 // 弾のタイプ qtype int(obj(1, TrueEmpty)), type_bindY qtype int(obj(1, TrueEmpty)), type_bindR qpush int(obj(1, TrueEmpty)),,, 7.5, 0 ;オブジェクトの射出スピードを指定 return *object_out_of_range repeat length2(obj) if(obj(0, cnt) == -1.0) :continue qgetpos obj(1, cnt), obj(2, cnt), obj(3, cnt), obj(4, cnt) if(obj(2, cnt) == 190.0) :qdel int(obj(1, cnt)) :obj(0, cnt) = -1.0 ;画面座標 x.760 を超えると消去 loop return *mainobject_out_of_range ;【ミス】比較演算子が抜けまくっている if((px 3) (px 185) (py 3) (py 97)) :qspeed mainobj, 0.0, 0.0, 0.0, 1 if(px 3) :qpos mainobj, 3, py ,0.0 if(px 185) :qpos mainobj, 185, py ,0.0 if(py 3) :qpos mainobj, px, 3 ,0.0 if(py 97) :qpos mainobj, px, 97 ,0.0 return



イヤホン

リンク

2014/4/27(Sun) 03:06:48|NO.61703

すみません(;ω;)
私がソースをあげたあとに確認し損ねてたのが悪かったです
そのせいで、まるで穴埋め問題みたいになってしまいました
あと、:は基本{}で書いてます。
>>obj(0,length2(obj)) = -1.0 ,0.0 ,0.0 ,0.0, 0.0 ;>>【疑問】これって初期化しているの?
Ans.はい、そのつもりです。



#include "obaq.as" #define wxs 760.0 ; wxs = 画面の横の長さ #define wys 400.0 ; wys = 画面の縦の長さ  #define cxs 32.0 ; cxs = 画像を縦に分割する長さ #define cys 32.0 ; cys = 画像を横に分割する長さ //ステータス画面1 screen 0,350,240,0,5,5 : title "Status Window(enemy)" //ステータス画面2 screen 3,350,40,0,0,277 : title "Status Window(player)" //obaq画面 screen 2,wxs,wys,0,365,0 : title "obaq Window" //画像を読み込み celload "images\\dotcg_n02.bmp",1 ; 自機&敵機の画像をロードする celdiv 1,cxs,cys,cxs/2,cys/2 //変数初期化 px = 160 : py = 80 ; 赤い点のオブジェクトの座標 px_e = 0.0 : py_e = 0.0 ; オブジェクト座標変換用 pspeed = 0.3 : pspeed0 = -0.3 ; pspeed = 本体の速さ //オブジェクト管理用変数 //内訳  //(0) = フラグ //(1) = オブジェクトID //(2) = 座標x(画面) //(3) = 座標y(画面) //(4) = 角度(内部) ddim obj ,5 ,16 repeat length2(obj) obj(0,cnt) = -1.0 ,0.0 ,0.0 ,0.0 ,0.0 loop //obaq システム設定  qreset qborder -96.0 ,-51.0 ,106.0 ,51.0 ; 横幅の右側のみサイズ可変 qgravity 0.0 ,0.0 //赤いオブジェクト(発射地点表示) qcnvaxis px_e ,py_e ,px ,py ,1 //座標変換 : 画面座標から obaq 座標に変換 qaddpoly mainobj ,4 ,px_e ,py_e ,0.0 ,5.0 ,5.0 ,0 ,1 ,2 qtype mainobj ,type_bindR //メインループ開始 *main qgetpos mainobj ,px ,py ,pr qcnvaxis px_e ,py_e ,px ,py ,1 qgetspeed mainobj ,pxsp ,pysp ,prsp time++ //キー入力処理 gosub *key_input //赤い点のオブジェクトから if ((ky&16)!0)&(time\20 = 0) { gosub *objcreate } //オブジェクト範囲外処理 gosub *object_out_of_range gosub *mainobject_out_of_range qexec gosub *ObjectExec //オブジェクトデータ管理更新 gosub *status_enemy_window_redraw gosub *status_player_window_redraw redraw 0 color : boxf qdraw 0 redraw 1 await 16 goto *main //キー入力処理 *key_input stick ky,31 if ky&128 { end } if ( px >= 3 )&( px <= 185 )&( py >= 3 )&( py <= 97 ){ if ky&1 { qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,1 if ky&2 { qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,0 } if ky&4 { qspeed mainobj ,pspeed ,0.0 ,0.0 ,0 } if ky&8 { qspeed mainobj ,0.0 ,pspeed ,0.0 ,0 } } if ky&2 { qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,1 if ky&1 { qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,0 } if ky&4 { qspeed mainobj ,pspeed ,0.0 ,0.0 ,0 } if ky&8 { qspeed mainobj ,0.0 ,pspeed ,0.0 ,0 } } if ky&4 { qspeed mainobj ,pspeed ,0.0 ,0.0 ,1 if ky&1 { qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,0 } if ky&2 { qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,0 } if ky&8 { qspeed mainobj ,0.0 ,pspeed ,0.0 ,0 } } if ky&8 { qspeed mainobj ,0.0 ,pspeed ,0.0 ,1 if ky&1 { qspeed mainobj ,pspeed0 ,0.0 ,0.0 ,0 } if ky&2 { qspeed mainobj ,0.0 ,pspeed0 ,0.0 ,0 } if ky&4 { qspeed mainobj ,pspeed ,0.0 ,0.0 ,0 } } if ( (ky&1)=0 )&( (ky&2)=0 )&( (ky&4)=0 )&( (ky&8)=0 ) { qspeed mainobj ,0.0 ,0.0 ,0.0 ,1 } } return //ステータスウィンドウ1の更新 *status_enemy_window_redraw gsel 0 redraw 0 color : boxf : color ,255 pos 0,0 : mes"ID" pos 80,0 : mes"X座標" pos 170,0 : mes "Y座標" pos 260,0 : mes "角度(ラジアン)" line 0,18,350,18 line 0,220,350,220 pos 0,222 : mes "オブジェクト管理有効最大数 : "+ActiveObjectMax+" ("+length2(obj)+")" chc = 0 repeat length2(obj) //表示の座標・角度はすべて内部座標です。 if ( obj(0,cnt) = -1) { continue } pos 0,chc*20+20 : mes "("+cnt+") : "+int(obj(1,cnt)) pos 80,chc*20+20 : mes ""+obj(2,cnt) pos 170,chc*20+20 : mes ""+obj(3,cnt) pos 260,chc*20+20 : mes ""+obj(4,cnt) chc++ if chc >= 10 { break } loop redraw 1 gsel 2 return //ステータスウィンドウ2の更新 *status_player_window_redraw gsel 3 redraw 0 color : boxf : color ,255 pos 0, 0 : mes"ID" pos 80 ,0 : mes"X座標" pos 170 ,0 : mes "Y座標" pos 260 ,0 : mes "角度(ラジアン)" line 0 ,18 ,350 ,18 pos 0,20 : mes "mainobj" pos 80,20 : mes px pos 170 ,20 : mes py pos 260 ,20 : mes 0.0 redraw 1 gsel 2 return //オブジェクト管理データを更新 *ObjectExec ActiveObjectMax = 0 repeat length2(obj) if ( obj(0,cnt) = -1.0 ) { continue } qgetpos int(obj(1,cnt)) ,obj(2,cnt) ,obj(3,cnt) ,obj(4,cnt) ActiveObjectMax++ loop return //オブジェクト管理から空きを探す *ObjectEmpty TrueEmpty = -1 repeat length2(obj) if ( obj(0,cnt) = -1.0 ) { TrueEmpty = cnt : break } loop if ( TrueEmpty ! -1 ) { return } obj(0,length2(obj)) = -1.0 ,0.0 ,0.0 ,0.0, 0.0 ;>>【疑問】これって初期化しているの? TrueEmpty = length2(obj) - 1 return //緑のオブジェクトの生成と発射処理 *objcreate gosub *ObjectEmpty qcnvaxis px_e ,py_e ,px ,py ,1 _TempObj = -1 qaddpoly _TempObj ,4 ,px ,py , ,5 ,5 , ,2 ,1 ; 出現処理(チェックを含む為、一時的にIDを格納) if _TempObj < 0 { return } obj(0,TrueEmpty) = 1.0 ,double(_TempObj) ,px_e ,py_e ,0.0 //弾のタイプ qtype int(obj ( 1 ,TrueEmpty ) ) ,type_bindY qtype int(obj ( 1 ,TrueEmpty ) ) ,type_bindR qpush int(obj(1,TrueEmpty)) , , ,7.5 ,0 ; オブジェクトの射出スピードを指定 return *object_out_of_range repeat length2(obj) if ( obj(0,cnt) = -1.0) { continue } qgetpos obj(1,cnt) ,obj(2,cnt) ,obj(3,cnt) ,obj(4,cnt) if ( obj(2,cnt) >= 190.0 ) { qdel int(obj(1,cnt)) : obj(0,cnt) = -1.0 } // 画面座標 x.760 を超えると消去 loop return *mainobject_out_of_range if ( px < 3 )|( px > 185 )|( py < 3 )|( py > 97 ) { qspeed mainobj ,0.0 ,0.0 ,0.0 ,1 } if ( px < 3 ) { qpos mainobj ,3 ,py ,0.0 } if ( px > 185 ) { qpos mainobj ,185 ,py ,0.0 } if ( py < 3 ) { qpos mainobj ,px ,3 ,0.0 } if ( py > 97 ) { qpos mainobj ,px ,97 ,0.0 } return



あり

リンク

2014/4/27(Sun) 10:36:14|NO.61704

画像がないから動かないという事は置いておくとして
キー入力部分をこういう風にしてみるとか。

//キー入力処理 *key_input pspeedx = 0.0 : pspeedy = 0.0 stick ky,31 if ky&128 { end } if px >= 4 : if ky&1 : pspeedx - pspeed if px <= 184 :if ky&4 : pspeedx + pspeed if py >= 5 :if ky&2 : pspeedy - pspeed if py <= 95 :if ky&8 : pspeedy + pspeed qspeed mainobj ,pspeedx ,pspeedy ,0.0 ,1 return



イヤホン

リンク

2014/4/27(Sun) 12:14:46|NO.61705

ありさんありがとうございます。
おかげで、端でちゃんと止まるようになりました。
本当にありがとうございます。



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