10/03/04 20:54:15 LD9yAEkV
>>100が昨年12月に出したお題、「HSPはアクションゲームを作るのに適しているか?」
について、私なりの論考を書いておくものである。
1.HSPはゲームを作るのに適しているか?
これはもう素晴らしくYESである。私は後述するノートン問題により、HSP以外の選択肢は
ないものかと検索してみた。どうやら次の候補に来るのはDXライブラリであるようだ。が、
「意味は分からないだろうけどとりあえずこの通りにして開発環境を築きなさい」として
長々と書き連ねてあるのを読むと、それだけでやる気がなくなるのである。他にBASICに
似た言語としてDarkBasicというのがあるらしいが、有料のようだ。無料で、しかも簡単。
HSPは素晴らしい。
2.HSPはアクションゲームを作るのに適しているか?
HSPなら画像、音声出力、キー、ジョイパッドからの入力も簡単である。ポインタ、構造体
も関係ない。逆に言えば、そういうプログラム上の煩雑さを除いて、アルゴリズムだけに
特化するならば、何言語だろうがその構造は同じである。ここでは、格闘ゲームではなく、
悪魔城ドラキュラのようなアクションゲームについて考えてみる。地形、敵、敵の弾といった
ものは、HSPの場合配列変数に格納されるだろう。C言語の場合(ポインタを使う場合、と
いってもいいだろうが)、敵が1匹死ぬと、該当する変数を不要のものとし、ポインタをつなぎ
直す、といった処理が必要になってくる。座標や敵の種類、現在どういった状況であるのか、
といったすべての変数について、ポインタのつなぎ直し処理が必要になってくるのだ。
それを防ぐためには、敵に関するすべての情報を構造体とし、一つの変数に格納する必要が
あるかもしれない。
104:名前は開発中のものです。
10/03/04 20:56:07 LD9yAEkV
もちろん、配列においても、几帳面な人は死んだ敵の変数は不要のものとし、それ以降の
変数をひとつずつ前にずらす、といったことをやっているかもしれない。
これならば、敵の処理にかかる時間を最小限におさえることができるからだ。しかし一般的
には、敵のフラグという配列変数を用意し、敵の出現と同時に1とし、死ぬと同時に0とする
だろう。この場合、画面に登場する敵の最大数を100とするならば、1フレームごとに100
個のフラグをチェックすることになる。だが現代のPCは十分に高速であるので、気にする
必要もないだろう。
現実には敵の出現数はせいぜい10匹程度であると思われる。HSPの場合注意すべきは、
むしろ地形の方である。例えば32*32ドットの矩形を1ブロックとする。画面が640*480で
あるならば、最大20*15=300個のブロックが配置可能ということになる。存在するブロック
すべてについて、主人公と地形の当たり判定を行わなければならないのだ。インタプリタ
型言語であるHSPにとって、これは苦しい問題だ。敵が壁に当たったら反転する、地面の
端に来たら反転する、といったアルゴリズムである場合、敵と地形との当たり判定も発生
するのだ。例えばawait 16としている場合、16ミリ秒をオーバーすることは由々しき問題
だ。自分のPCでゲームバランスを調整するのであるから、もしも16ミリ秒をオーバー
しているのであれば、自分より速いPCの持ち主では速すぎてものすごく難しいゲームに
なっている可能性もある。この、地形との当たり判定問題に関しては、より巧妙なアルゴ
リズムが必要であるかもしれない。例えば、地形の配列が
chikei(3)="100000000000011"
となっているとする。これは左から4ブロックめの、縦1列の状況である。今主人公がジャ
ンプして、着地しようとしているところだとする。ここでは、主人公の足元の1番前と1番後ろ、
2点の座標だけについて当たり判定を行うものとする。前の座標が今、x=100、y=418である
場合、int(100/32)=3、int(418/32)=13、つまりchikei(3)の14番目の数字を見てただちに
当たりと判定することができる。
105:名前は開発中のものです。
10/03/04 20:56:48 LD9yAEkV
3.NORTON INTERNET SECURITY 2010問題
最近になって起こった問題である。私のPCもそうだが、これがインストールしてある。HSP
の実行ファイルをノートンが勝手に消してしまうのである。おにたま氏がノートンに改善を
求め、ノートンが「修正しました」とおにたま氏に連絡したが、直っていない。つまりこれは、
同セキュリティソフトをインストールしてあるすべてのPCで、HSP製のソフトが動かないと
いうことを意味する。このため私は>>100に、アクションゲームを作るのに最適なソフトと
してHSPをお勧めすることができない。驚くべきことに、おにたま氏を初めとするこの問題
に言及している人は、誰も怒っていない。私は昔ソフトウェアの品質保証の仕事をしていた
こともある。烈火のごとく怒るべきである。ノートンは徹夜してでも直せよと。
ノートンは世界からHSPを抹殺しようとしている。
106:名前は開発中のものです。
10/03/08 18:40:40 KjIgRWrY
「論考」ってバカじゃね?
107:名前は開発中のものです。
10/03/08 23:52:36 xLHwVxSC
一生懸命長文書いたんだから、そんなに責めてやるなよ
108:名前は開発中のものです。
10/03/09 10:24:36 rBu1byup
ここまでHSPついて真面目に考えてくれる人も少ない
109:名前は開発中のものです。
10/03/21 16:18:43 IJrbN5IE
割と素直に感動した
110:名前は開発中のものです。
10/04/02 13:38:46 PHi8AHxO
HSPユーザに質問があります。
ぼくはプログラミングのとっかかりはHSPだったので、使い勝ってがいいのはわかります。
簡単なゲームならすぐに作れるし。
しかし、 ぼくは出会ってしまったんです。 FLASHに。。
確かにムリョウではないですFlashは。
しかしFlashのあまりのすばらしさに感動してしまったのです。
グラフィックを描くことが前提で作られている。 オブジェクトも階層化できるので
HSPみたいに変数がかぶるなどという低次元な心配がいらない。
はっきりいって、HSPで軽くプログラミングを楽しみたいという自分程度のプログラマー
なら、Flashのほうが断然いいのでは?? と思ってしまいました。
HSPユーザーのみなさんはどう思われますか?
HSPを使う理由ってなにかあるのでしょうか?
111:名前は開発中のものです。
10/04/02 13:42:42 PHi8AHxO
つづきですが、Flashのスクリプトにはactionscript3.0という高速に実行できる
環境もありますし、
世界中で3DエンジンやらLightWaveなど有名ソフトと連携するためのライブラリが
あります。
さらにブラウザ上で動かすので、windowsでもmacでも遊ぶ事が出来ます。
112:名前は開発中のものです。
10/04/02 13:43:09 312z5Jcj
ゲームしか作らないならそれでも良いけど
4がつばかは昨日までですよ
113:名前は開発中のものです。
10/04/02 16:57:57 PHi8AHxO
>112
ぼくはまさにゲームの話をしてるんですよ。
HSPでPhotoshopでもつくろうっていうんですか?
114:名前は開発中のものです。
10/04/03 13:13:58 9Yh2mBFe
2dスクロールアクションをつくっているんだけど、
SFCのスーパーマリオみたいなオフセット位置の決め方が分からない
具体的にいうと、マリオの向いている方向が、より遠くまで見えて、
急に向きを変えたりしても、違和感なくオフセット位置が動くような。
どなたかアイデアありませんか?
マリオのコードが見たい・・
115:名前は開発中のものです。
10/04/03 14:21:31 /HNuBj6+
>>114
キャラクターの向き boolen D (false右向きR,true左向きL)
キャラクターの位置 integer X,Y
ビューポイントX integer VX (Xに対しての相対位置)
ビューポイントXL const VlX (VXが最終的にあるべき位置)
ビューポイントXR const VrX
if D
{
XVがVlXと同じじゃなければ近づける
} else {
XVがVrXと同じじゃなければ近づける
}
116:名前は開発中のものです。
10/04/03 18:50:36 GPcMKza7
C++しか知らん俺にHSPはどんなことが出来るのか教えてくれ
○○の処理がどんな風に出来る、とか
117:名前は開発中のものです。
10/04/03 20:52:08 2IE5q2HF
ウインドウの作成が1行でできる
他色々
118:名前は開発中のものです。
10/04/04 14:23:19 hFzrHQaf
>114
洞窟物語のような感じかな?
119:名前は開発中のものです。
10/04/05 07:33:20 cS3R7I9s
>>116
何も書かなくても問題なく実行できる
120:名前は開発中のものです。
10/04/05 13:48:01 dc21abzx
>>116
Win32 API他、既存のDLLがけっこうお手軽に利用できる。COMも使える。
121:名前は開発中のものです。
10/04/05 13:50:56 dc21abzx
ていうか、マニュアル読むかコンテストのページ見た方が早い。
122:名前は開発中のものです。
10/04/05 20:01:05 dKgEjKp6
>>116
まず最初に
picload "hentai.jpg"
の一行でウィンドウに画像が表示できる
C++だとハードやOS、jpgのファイル構成の知識も必要ですが
hspならこれ一行、マジでこれ一行
「main」とか「void」とか不要、メモリの確保も解放も不要、DLLも不要
他に、ボタン判定、waitなどゲーム制作的なことは
一行で足りることが多い
>>116 さんは凄腕かもしれないけど
おれならC++のコンパイラだけ渡されて
これらを実現しろと言われるとマジで気が滅入る、というか逃げる
123:116
10/04/05 23:05:57 LnGtu5ZQ
なるほど、なんとなく分かった。ありがとう
124:名前は開発中のものです。
10/04/07 08:40:57 Vkp0Vww4
>>103
変数には文字型配列を使うと管理が楽だよ。
応用すれば何かを重ねて表示する場合にも使える。
基本入出力命令と文字列操作関数はマスターした方がいいかも。
キャラ同士も地形と同じ考え方でいいよ。
移動するたびにキャラ番号を座標から導き出したマスに置く。
ただすでに味方が置いてあるマスの場合、そこには一つしか番号が置けない欠点があるね。
サイズが異なったものや斜面処理でも条件式を加えれば応用は可能だよ。
昔のゲームソフトは速度的に遅かったからそういう処理が多かったんだ。
125:名前は開発中のものです。
10/04/07 21:28:29 h2+BYV8H
>>124
RPGならともかく、アクションはそれじゃダメだろ
ポインタですべてのインスタンスを配列かリストで管理すべき。
使用中のインスタンスと未使用のインスタンスを持って、
適宜相互にインスタンスを移動するのが普通だし、汎用的。
それより、アクションはインスタンスの状態管理が重要
状態遷移マシンを作ると楽にアクションゲームが作れる
126:名前は開発中のものです。
10/04/11 13:00:42 sX0GCi0v
>>124
え゛?
数値型配列ではいけないの?
127:名前は開発中のものです。
10/04/11 18:27:05 60JK+RHt
今hmm.dll使ったゲームを何人かにテストプレイしてもらったんだけど
画像の表示位置が微妙にずれる人がいたんだが
グラフィックボードによっては表示位置や仮想画面からの取得位置がずれたりするもんなのかな?
128:MIAのすごいスクリプト(原理はわからん)
10/05/12 20:33:05 zIpdnuJi
前半
; 重力を考慮した状態で硬いバネを複数繋ぎ、ヒモの動きを再現する ※位置と速度の更新方法が、ここまでのサンプルと変わっています
#define N 20 ; 制御点の数
#define L 10.0 ; 制御点を繋ぐバネの長さ
#define G 1.0 ; 重力
#define R 0.98 ; 速度に掛けるダンパー値
#define K 1.0 ; ばね定数
; データ領域の確保 (x,y = 現在の座標、ox,oy = 移動元の座標、vx,vy = 速度)
ddim x, N : ddim y, N : ddim ox, N : ddim oy, N : ddim vx, N : ddim vy, N
*MAIN
stick bt, 256 : if bt & 128 : end
; 移動元の座標を保存
repeat N
; 地面と接触していたら速度を減らす(摩擦)
if y(cnt) >= 460 : vx(cnt) *= 0.8
ox(cnt) = x(cnt) : x(cnt) = limitf(x(cnt) + vx(cnt), 20, 620)
oy(cnt) = y(cnt) : y(cnt) = limitf(y(cnt) + vy(cnt), 20, 460)
y(cnt) += G ; 重力を加える
loop
129:MIAのすごいスクリプト(原理はわからん)
10/05/12 20:34:43 zIpdnuJi
後半
; 結果を安定させるため、ある程度繰り返す
repeat 16
; マウス操作(クリックで端を引っ張る)
if bt & 256 {
x(0) = double(mousex) : xv(0) = 0.0
y(0) = double(mousey) : yv(0) = 0.0
}
; 力の解決
repeat N-1 : t = cnt + 1
; バネにかかる力の式 (f = kd)
dx = x(t) - x(cnt) : dy = y(t) - y(cnt)
d = sqrt(dx * dx + dy * dy) : if d = 0 : d = 1.0
f = (d - L) * K : ff = f * 0.5 / d
; 作用・反作用の法則に基いて、力を加える
x(cnt) += dx * ff : x(t) -= dx * ff
y(cnt) += dy * ff : y(t) -= dy * ff
loop
loop
; 速度の更新(元の状態との差を次フレームの速度とする)
repeat N
vx(cnt) = (x(cnt) - ox(cnt)) * R
vy(cnt) = (y(cnt) - oy(cnt)) * R
loop
; 描画
redraw 0 : color : boxf : color 255, 255, 255 : pos x(0), y(0)
repeat N : line x(cnt), y(cnt) : loop : redraw 1 : await 15
goto *MAIN
130:名前は開発中のものです。
10/05/13 14:52:42 b/2h1Ezh
>>1
なにこのひどいスレタイ
期待の星ってアホですかと
131:名前は開発中のものです。
10/05/15 20:29:54 aV0xMDug
九年たって。
132:名前は開発中のものです。
10/05/17 09:35:01 k4j0vMVC
>>80
Yahoo! JAPAN IDが無効です。