[過去ログ] ズブの初心者がゲーム作れるまで勉強するスレ (990レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
852: 名前は開発中のものです。 [] 2006/03/18(土) 00:09:23 ID:UdlfWr/S(1/9) AAS
#module機能覚えた
でもこれ名前つけられるようになってる意味がわからん
853: 名前は開発中のものです。 [] 2006/03/18(土) 00:26:22 ID:UdlfWr/S(2/9) AAS
逆に考えるんだ・・・・タスクシステムはいらない・・・・
・・・・ひとつの配列ですべての種類のデータを格納できれば・・・・いらないはず・・・・
配列の増減をDimでするなら・・・・・・ポインタで繋ぐ意味はない・・・・
854(2): 名前は開発中のものです。 [] 2006/03/18(土) 01:15:18 ID:UdlfWr/S(3/9) AAS
タスク管理の方法をおおざっぱに3種類にわけてまとめてみた
■タスクシステム
・すべての種類のデータを一つのリスト構造に納めることができる
・データの増減が可能
・HSPで擬似的に実現してるために前者はワーク領域のデータ型が制限される、
・後者は増減時に時間がかかってしまうのでメリットは少ない
■フラグ法
・タスクの利用可否をフラグで判断する方法
・実行時に配列すべてを走査する必要がある
・平均実行時間がタスクリストの最大実行時間と同じ程度になる
■最大値可変法
・擬似的な動的配列を実現する方法
・追加するときは配列の最大値を加算し末尾に代入する
削除するときは削除するタスクに末尾のタスクを上書きコピーし配列の最大値を減算する
・平均実行時間はタスクリストと同じ程度
856: 名前は開発中のものです。 [] 2006/03/18(土) 09:15:01 ID:UdlfWr/S(4/9) AAS
了解した
858: 名前は開発中のものです。 [] 2006/03/18(土) 10:53:43 ID:UdlfWr/S(5/9) AAS
>>857確認してきた
ほんとだ、スゲー!感動した
>>825825(2): 名前は開発中のものです。 [] 2006/03/14(火) 23:45:46 ID:BjyEc4sd(10/10) AAS
弾をたくさん出せるようになった
配列確保して弾を使い終わったらフラグをオフにしてる
ソース
>>822-824
最高何発まで出せるかが配列に制限される
これをなんとかしたい
案1.配列をたくさん確保しておく
何の解決にもなってないけど今の知識では現実的な妥協点
メリット:実現の目処が立っている
デメリット:必要な配列数を事前に計算する必要がある
あまりデメリットはないかもしれない
案2.動的に確保する(線形リスト)
思いついたコードがこれ
pNext=5
dim task, 5
dim a.pNext, 5
配列に配列を入れるっていう方法で線形リストを作れないか試したけど失敗
案3.動的に確保する(動的配列)
まず2つの配列を用意する
増減があるたびにdimで配列を確保してコピーする
増減が多いと配列全体のコピーが頻発するからゲームには向かないっぽい
増減が少ない場合は空の配列をチェックしなくて済むので案1.より高速
どれもいまいちピンとこない
>>829829(2): 名前は開発中のものです。 [] 2006/03/15(水) 23:43:00 ID:CsslkguR(2/2) AAS
タスクシステムというのはタスクで構成されたタスクリストのこと
タスクは次の情報をもっている
・キャラクタ1体の情報(X、Y座標やHPなど)
・キャラクタの振る舞い(どのサブルーチンを呼ぶか)
・次のキャラクタ(次にどのタスクを実行すればいいか)
タスクが繋がった状態のデータ構造をタスクリストという
タスクシステムは次の機能をもっている
・タスクの追加
・タスクの削除
ほかの言語だと「次のキャラクタ」にポインタを使う
そうすれば動的に確保したタスクを使えるからだ
でもHSPにはポインタがない
代わりに配列の添え字を使う
もし配列のサイズが足りなくなれば案3(>>825)の方法で配列を大きくする
ただし頻繁にサイズを変更するとデータのコピーに時間が時間がかかる
そこでサイズを変更するときは1つずつ増やすのではなく一気にたくさん増やす
まとめ終わり
とりあえず今考えてることをまとめてみた
Dim命令で配列サイズ変更すると内容がすべて0クリアされるのが痛い
「1つずつ増やすのではなく〜」の部分はこれを書いている最中に思いついた
これさえうまく組めばサイズ可変は速度低下ほぼなしでいけそう
>>854あたりの発言は取り消す
根本的に発想を変えなきゃいけないみたいだ
860(2): 名前は開発中のものです。 [] 2006/03/18(土) 22:38:18 ID:UdlfWr/S(6/9) AAS
#define MAX 100
turn=0
//変数
Dim tl,MAX,3 //敵
repeat MAX
tl.cnt.0=1 //利用中(0=否)
tl.cnt.1=0 //呼び出すサブルーチン
tl.cnt.2=(cnt*64)\640 //X座標
tl.cnt.3=(cnt*64)/640*64 //Y座標
loop
cx=320
cy=440
//裏画面
screen 1,640,480,2
//自機
screen 2,32,32,2
picload "jiki.bmp",2
//敵機
screen 3,32,32,2
picload "teki.bmp",2
screen 0,640,480
861(1): 名前は開発中のものです。 [] 2006/03/18(土) 22:38:49 ID:UdlfWr/S(7/9) AAS
cls 4
repeat
//裏画面を作る
gsel 1,-1
cls 4
await 1
//自機
cx_speed=8
stick keyboard,15,1
switch keyboard
case 1
cx=cx-cx_speed
if cx<0 : cx=0
swbreak
case 4
cx=cx+cx_speed
if cx>639-32 : cx=639-32
swbreak
case 64
if benable=0 {
benable=1
bx=cx+16
by=cy
}
swend
pos cx,cy: gcopy 2, 0,0
862(1): 名前は開発中のものです。 [] 2006/03/18(土) 22:41:48 ID:UdlfWr/S(8/9) AAS
//自機弾
if benable=1 {
by=by-8
if by<0 : benable=0
color 255,255,255
line bx, by, bx, by-16
}
//敵機
turn=0
ndir=dir
repeat MAX
if tl.cnt.0 = 1 {
pos tl.cnt.2,tl.cnt.3:gcopy 3, 0,0,32,32
tl.cnt.2 = tl.cnt.2+dir
if (tl.cnt.2 <= 0) : ndir=1
if (tl.cnt.2 >= 602) : ndir=-1
//あたり判定
if benable and tl.cnt.2<bx and tl.cnt.2+32>bx and tl.cnt.3<by and tl.cnt.3+32>by: tl.cnt.0 = 0
}
loop
if dir!ndir {
repeat MAX
tl.cnt.3=tl.cnt.3+4
loop
}
dir=ndir
863(1): 名前は開発中のものです。 [] 2006/03/18(土) 22:42:30 ID:UdlfWr/S(9/9) AAS
//表画面へコピー
gsel 0,1
pos 0,0: gcopy 1,0,0,640,480
loop
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.029s