トップページgamedev
987コメント370KB

HSP - Hot Soup Processor [14]

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001名前は開発中のものです。2006/12/09(土) 22:35:08ID:E0eCgjhQ
       (  ,,,)
        .(  ,,)      スクリプト言語 HotSoupProcessor について
        ( ,,).        ゲーム製作の視点から、また〜りと語り合うスレ。
     , -──- 、
    (,;::-──-; )-、
     .|` ̄ ̄ ̄´;;|ヽ l   * 質問する前に検索してみる事
     l;    :::;;;l-' /   * ヲチ、ネタなどはスレ違い
    ,-ヽ───.'-、´..   * 歴代スレ、関連サイトは >>2-4 あたり
    ヽ ──── '

  ONION software (本家)
   http://www.onionsoft.net/
0834名前は開発中のものです。2007/05/07(月) 21:49:47ID:pmbXnqyF
「12歳からはじめるHSPゲームプログラミング」という本を見ながらじゃんけんゲームを作成しているのですが、
以下のソースを実行すると"#Error 18 in 6 (janken.hsp) -->代入できない変数名を指定しています"と出て、正常に実行されません。


randomize
buffer 1,,,1
picload "janken.bmp"

screen 0,320,260,1
gmode 2

*hazime
rnd R,3
pos 30,0 : gcopy 1,0,0,200,180
pos 30,70 : gcopy 1,200+(80*R),0,80,90
wait 50
goto *hazime


何かおかしな部分がありますか?
本はHSP2を対象に書かれていて、現在使用しているのはHSP3なので、そこらへんが問題だと思うのですが、いかがでしょうか?
0835名前は開発中のものです。2007/05/07(月) 21:52:15ID:Foh+9yi0
rnd R,3

R = rnd(3)
0836名前は開発中のものです。2007/05/07(月) 22:02:25ID:B/mb8Q1D
>>832
まあ結局>>833の言うとおりなんだけどな。

生ttfをゲームに同梱して配布するのはかなりやばい。
内部にBMP化してフォントを内蔵するのも、それなりにやばい。
一枚絵の中に文字が入っている、程度ならあまりやばくない。

また、大抵の場合、フォントを内蔵したワープロソフトみたいな
「フォントを"フォント"として取り扱う形態で配布」すると問題が大きくなる。
(注:ゲームには無関係のように見えるが、よくある「名前を入力する」部分が
ワープロ的だと見なされる場合がある)

やばいなと思うなら、フォントを内蔵せず、OSのフォントを呼び出すだけにしておいたら安全確実。
一枚絵の中に文字が含まれている、程度ならまあ大丈夫。
何万と売りさばく事が前提なら、何れにしろきちんとライセンスを取っておくこと。
0837名前は開発中のものです。2007/05/07(月) 22:03:17ID:PZ9SZ2Mt
>rnd R,3

R=rnd(3)

HSP2の頃のサンプルを使うなら
HSPエディタの有るフォルダに index.htmってのがあるから
その中の

・以前のバージョンからの変更点(アップデートガイド) (update.htm)

これを一度見といた方がいい
0838名前は開発中のものです。2007/05/08(火) 05:43:06ID:vruKdlwD
クォータービューのACTやSTGの、当たり判定は矩形のまま行っているの?
それとも、クォータービュー用(?)定番アルゴリズムとか、あるんでしょうか
0839名前は開発中のものです。2007/05/08(火) 10:53:15ID:8GDuzc4l
別に矩形で良いんじゃないの
何か問題?
0840名前は開発中のものです。2007/05/08(火) 16:45:06ID:GV3ApysF
>>835
>>837
これでやっと先に進めます!
アップデートガイドの存在には気がつきませんでした。
今後は活用したいと思います。
ありがとうございました。
0841名前は開発中のものです。2007/05/08(火) 23:45:41ID:tONREbU4
関数タイプになって
pos rnd(639) , rnd(479)
みたいな記述ができて楽になった

gcopy 1,200+(80*rnd(3)),0,80,90
0842名前は開発中のものです。2007/05/09(水) 20:52:30ID:VSNS2raa
HGIMG3のモデル領域は開放できない?
オブジェクト領域はできるらしいんだけど エロイ人ご教授ください
0843名前は開発中のものです。2007/05/09(水) 23:53:51ID:07ufZ3sL
>>838
クォータービュー用定番アルゴリズムなんてものはない!ゲ製作はいまだに職人
の世界だっ!師匠の指裁きや筆遣いや寿司ネタの握り方を見て技術を盗むんだよ。
定番のアルゴリズムは講座や本読めば買いてあるだろう。しかしクォータービュー
だとか、ちょっと凝ったやつになるとどうだ。ブツを見てどんなアルゴリズムなんだろう
な〜と想像するしかない。ブラックボックスってやつだね。でもゲ製作ってそういう
もんじゃね?ゲーム見て「これってどうやったらできるんだろう」って思う。そしてその
方法を考える。「ああこうやればできるや」って思えば技術の向上だ。
俺くらいの中級者になるとざっと考えるだけでこんだけ出てくるぜ。
>>839に同じ。矩形。
・円ならもうちょっとマシなんじゃないか。
・ひし型の当たり判定その1。三角形2つと四角形1つに分ける。三角形は斜めに
 なった四角形の判定でできる。
・ひし型ってのは長方形が上に行けば行くほど右にずれてるってことだ。そこから
 導かれる計算式は?
・計算的にはまっすぐなスクロール。表示する時だけ斜めにする。
0844名前は開発中のものです。2007/05/10(木) 00:20:36ID:2z4zuSSr
つーか、クオータービューとか関係なく、辺り判定したいキャラの形が問題なんじゃね?
0845名前は開発中のものです。2007/05/10(木) 00:34:29ID:J9txepzh
よっぽど巨大で複雑怪奇な形でもない限り矩形で問題ないが
0846名前は開発中のものです。2007/05/10(木) 04:35:42ID:U2vxhvV7
えー?
ていうか、クォータービューって単に表示上斜めってなってるだけだから
内部処理では普通のSTG等と同じ事やってて、
表示だけ斜めにするんじゃねーの?
0847名前は開発中のものです。2007/05/10(木) 06:59:01ID:+xzQXwZO
いや、その理屈は正しい
0848名前は開発中のものです。2007/05/10(木) 14:06:21ID:IknmfbEQ
あ?
3Dでやるの?
0849名前は開発中のものです。2007/05/10(木) 21:03:24ID:tEu0m8/u
質問なんですがゲームで2人対戦を作るとき、
キーボードを二つパソコンにつないで同じボタンを押しても
1Pが押したのか2Pが押したのか分かるやりかたを教えてください。
お願いしますm(__)m
0850名前は開発中のものです。2007/05/10(木) 21:54:52ID:J9txepzh
それは無理だろ
0851名前は開発中のものです。2007/05/10(木) 22:00:18ID:Pb7a8JUW
環境がSFCなら出来るんじゃね?
0852名前は開発中のものです。2007/05/10(木) 23:03:11ID:lvPcrjF3
>849
やり方があるのかどうかは、知らないが。
キーボードを二つ接続したPC環境を構築している人間は、少数派だろうから、
そのゲームを一般に公開するつもりなら、別の操作系を考えるのが賢明だと思う。
自分や仲間内だけで遊ぶゲームなら、その限りではないけど。
0853名前は開発中のものです。2007/05/12(土) 03:18:16ID:iitxNH6p
>>849
2人以上ならゲームパッド(ジョイバッド?)を使うのが普通だろうね。
パッドvsパッドかパッドvsキーボード。
というかそもそもキーボードはゲームにむいてない。一般のキーボードはほとんど2〜3キーロールオーバーだから。


あ、マウスvsキーボードって対戦もありか。w
08548492007/05/12(土) 09:38:38ID:CHidITY3
そうですか…無理ですか…ありがとうございました。
0855名前は開発中のものです。2007/05/12(土) 11:00:15ID:IIhlPIBe
つーか、その環境持ってるor調べようと思う奴が少ないからな。
今の時代パソコン2台でネット対戦にした方が早い気もするし。
0856名前は開発中のものです。2007/05/12(土) 11:31:45ID:BKWL2B2V
国内で最も使われてるフリーな環境はHSPですか?
0857名前は開発中のものです。2007/05/12(土) 11:42:17ID:9cDQPoon
昔、PC-88mkIISRというパソコンがあって、それにキーボード端子が2つ付いてた。
友人の家にキーボード持っていって実際に試したけど
両方のキーを受け付けて、判別はできなかったな。

マウスVSキーボードも、対戦マインスイーパー作って試してもらったんだけど
圧倒的にマウスのほうが操作早くて、公平なプレイにならなかった。

まぁ、パッド2つが無難だろう。
0858名前は開発中のものです。2007/05/12(土) 15:11:32ID:tMkY9b8/
88SRって端子二つあったっけ
おぼえてねー
0859名前は開発中のものです。2007/05/12(土) 20:47:05ID:LoRPkVYn
>>856
何に使われてる環境だ?
0860名前は開発中のものです。2007/05/12(土) 23:28:26ID:tMkY9b8/
ミサイル弾道計算じゃね
0861名前は開発中のものです。2007/05/12(土) 23:29:58ID:qzFNDBxk
>>855
確かに、俺も対戦ゲーム作る時は、普通にLAN対戦にするだろうな。
そっちの方が楽だろう。
0862名前は開発中のものです。2007/05/13(日) 01:01:01ID:8A9djd1g
>>854
XP以降限定だけど、WM_INPUTでHIDの生データ取れば実現できるんじゃね?
試してないけどさ
0863名前は開発中のものです。2007/05/14(月) 00:05:11ID:bOzJ10Yl
マウスホイールの操作で画面スクロールさせようと思ってるのですが
mousewの使いかたがよくわかりません。。。
どうすればいいですしょうか?
0864名前は開発中のものです。2007/05/14(月) 00:26:20ID:uwtqYVSD
mousewはスクロールされると-120とか120という値が取得できます


// 画面の高さ
y = 0

*main
// 一時保存
// -1は情報が±が反転してるから
mw = mousew*-1
// もし動いたなら
if ( mw != 0 ) {
// その数値を加算
y = y+mw
// 調整
if ( y < 0 ) {
y = 0
}
if ( y > ginfo( 13 ) ) {
y = ginfo( 13 )-20
}
}
// 描画
redraw 0
color 255, 255, 255 : boxf
color 0, 0, 0 : boxf 0, y, ginfo( 12 ), y+20
redraw 1
// 待機
await 10
goto *main
0865名前は開発中のものです。2007/05/14(月) 01:07:27ID:ecV+XOk6
mousewって、積算型じゃなくて一度値を参照すると中身がリセットされるんだよな。
しかも、スクロールホイールを2回動かす間にmousewを一度しか参照しなかったら、
前の1回分は破棄されるというふてえ仕様だ。

あたまわるいmousewのために高頻度でポーリングするのも余計な負荷なので、
WM_MOUSEWHELLを捕まえて内部カウンタを積算したほうが便利よ。
0866名前は開発中のものです。2007/05/14(月) 01:10:27ID:bOzJ10Yl
>>864
おおぉーできました!ありがとうございます。
ifの判断でmousewをそのまま使ってたのがダメだったみたいです・・・。
0867名前は開発中のものです。2007/05/14(月) 19:39:39ID:bUJYvT5N
5年使ってたノートが壊れたので新しいノートを買ってきた。前のは20万。今度のはノート
としては最底辺の10万だ。んで自作ゲームを動かしてみた。ひど!微妙に遅い。いや
それよりももっとひどいのがMIDI。うわ!安物のPCだとこんなふうに聞こえるんだあ。
いくつかの楽器がまともに鳴ってない。あるいは完全に鳴ってない。
5年もたってるんだぜ!?いくら安くても進化しててよくね?みんな!これからはmp3だよ!
サイズが大きいのは嫌だって奴のためにMIDI版も自分のサイトに用意しといて、俺の
サイトまで来いと。
てか速度が遅いのはいかんともしがたいなあ。これじゃあだめだ。みんな!俺はゲ製作
から撤退するよ。今まで有難う!そしてさよーおならー!ブッ!シネ!
それかawait 16からawait 32に変えるか。
0868名前は開発中のものです。2007/05/14(月) 19:42:30ID:zgcv7AfZ
MIDIが酷いのはPCのせいじゃねえw
0869名前は開発中のものです。2007/05/14(月) 20:04:55ID:8OHbs/4R
つーか、ぶっちゃけ音質悪くても昔のファミコンのBGMの方が記憶に残ってる件w
0870名前は開発中のものです。2007/05/14(月) 20:19:48ID:gxCU6qzs
釣りだよね?
釣りじゃなったとしたら子供だよね?
0871名前は開発中のものです。2007/05/14(月) 20:41:16ID:2MGniMoO
うむ。

いくら10万円でも5年前の20万円よりはスペック上だと思うのだが、
一体何があったのだ。。

10万も出してスペックダウンするくらいなら
ショップブランドのデスクトップ型にした方が良かったんじゃないか。
0872名前は開発中のものです。2007/05/14(月) 21:13:38ID:jKbLwa2+
スルー力を君らに
0873名前は開発中のものです。2007/05/14(月) 21:26:36ID:qusRFGjc
>>867
何が原因で遅くなってるか調べたか?
ゲームが遅くなってるだけで、タスクマネージャのCPU使用率は50%ぐらいとかねーか?
つーか、OS,CPU、グラボ、メモリの違いも検討しないで買ったのかよ・・・
0874名前は開発中のものです。2007/05/14(月) 23:39:40ID:qQM3DdCm
>>867
マジレスすると、
5年前+20万=Win2000が快適に動く
今+10万=VISTAがぎりぎりで動く
とかじゃね?
0875名前は開発中のものです。2007/05/15(火) 00:26:10ID:xiOfuS6M
hsp2.6とhspdxfixでゲーム作ってるんだけど。
midiを演奏すると一瞬画面が止まります。

hsp以外の言語でもmidiファイルを演奏すると画面が止まりますか?
0876名前は開発中のものです。2007/05/15(火) 00:48:18ID:QwlCZrR2
いまどきmidiデータなんぞ止めてオーディオデータを使いましょう
0877名前は開発中のものです。2007/05/15(火) 01:12:07ID:FWjCeTAz
>>875
たぶんhmmとか使えばおk
0878名前は開発中のものです。2007/05/15(火) 01:29:42ID:OAuZRVq8
>>875
再生に使ってるデバイスの問題
初期化に時間が掛かる(WinXPだと特に遅いと聞いた)
言語自体の問題じゃないよ
HSP3ならmciのMPEGVideoで再生開始速度が
早く出来るけど2はどうだろ?
0879名前は開発中のものです。2007/05/16(水) 11:58:40ID:zA3GpFnY
まーしかし876に同意。
BGMがMIDIのゲームは嫌われたりするし、俺の環境ではミュートしちゃってる。
内蔵のソフトシンセなんて、どっちにしてもデータ作成者の意図どおりには鳴らんし。
0880名前は開発中のものです。2007/05/16(水) 20:41:40ID:SejtJ/t7
>>876
すみません、オーディオデータってのが何なのかよく解りません。
AVI形式のことですか?無知ですいません。
0881名前は開発中のものです。2007/05/16(水) 21:20:22ID:SzL9MSMh
wavとかじゃね?
0882名前は開発中のものです。2007/05/16(水) 21:22:09ID:6BjJtGUs
jpgだよ。
0883名前は開発中のものです。2007/05/16(水) 21:26:40ID:jv4GiZ2g
MOD最強
0884名前は開発中のものです。2007/05/16(水) 22:09:20ID:6XNIRCTA
マジレスするとrarのこと
0885名前は開発中のものです。2007/05/16(水) 23:49:37ID:FVllaHtw
>>880
四の五の言わずググれ。理解が深まるしそっちが早くて正確。
加えて話の流れも読むとより理解が深まるとおもうぞ。MIDIと対になってるだろ?

>>876,879
理解はできる。理解はできるが、ファイルサイズを気にしてしまう悪習慣がぬけないんだ。
つい、ね。
0886名前は開発中のものです。2007/05/17(木) 01:11:36ID:k6rYSu8+
つーか、曲自体の出来がアレなのに、音源・音質ばっかり凝ってるのもイランけどな。
0887名前は開発中のものです。2007/05/17(木) 03:06:38ID:qhlIETZh
まあそれはあるな
でもMIDIのBGMだったら鳴らさんほうがマシだ
0888名前は開発中のものです。2007/05/17(木) 14:16:09ID:UjIQhbyQ
それは聞き捨てならんな。

フリー素材はほとんどがMIDI
そんな時代もあったのだよ。
故にMIDI資産は膨大

しょぼい音源のゲーム臭さも何とも言えんし、
Sound BLASTERとか、そうでなくても
サウンドフォントが扱えるサウンドカードならだいぶ世界が変わる。

あとTiMidiとかいうソフト音源もオススメ。
http://twsynth.sourceforge.jp/


ぶっちゃけ音源によって音が変わるのが良いんだヨ('A`)
0889名前は開発中のものです。2007/05/17(木) 17:33:48ID:ECrUiSe6
hspext.dllを使わずにレジストリに新規キーを作成しようと思って下の
スクリプト作ってみたんですが、どうも上手く動作してくれません。
どこが間違ってるのか教えてくらさーい。XPでの使用を前提にしてます。
;****************************************************
;******************
//新規命令を作成//
;******************
#module
;関数
#uselib "advapi32.dll"
#cfunc RegCreateKeyEx "RegCreateKeyExA" int,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr
;定数
#const HKEY_CLASSES_ROOT 0x80000000
#const REG_OPTION_NON_VOLATILE $00000000
#const KEY_WRITE 0x20006
;新規命令
;p1=作成するディレクトリ
#deffunc Nh@_RegCreateKeyEx str Nh@_RegCreateKeyEx_P1
Nh@_RegCreateKeyEx_P0=HKEY_CLASSES_ROOT
nhret=RegCreateKeyEx(Nh@_RegCreateKeyEx_P0,Nh@_RegCreateKeyEx_P1,0,0,REG_OPTION_NON_VOLATILE,KEY_WRITE,0,hkey,0)
return
#global
;*******************
//メイン//
;*******************
makedir="testkey\\subkey"
Nh@_RegCreateKeyEx makedir
mes "CMPL"
stop
;*****************************************************
0890名前は開発中のものです。2007/05/17(木) 21:46:05ID:lJm49cl1
#module
#uselib "ADVAPI32.DLL"
#cfunc RegOpenKey "RegOpenKeyExA" int,int,int,int,int
#cfunc RegQueryValue "RegQueryValueExA" int,int,int,int,int,int
#cfunc RegCreateKey "RegCreateKeyExA" int,int,int,int,int,int,int,int,int
#cfunc RegSetValue "RegSetValueExA" int,int,int,int,int,int
#cfunc RegDeleteKey "RegDeleteKeyA" int,int
#func RegCloseKey "RegCloseKey" int
#define KEY_READ 0x00020019
#defcfunc ReadReg int _key, var _subkey, var _data
hkey = 0 //↓規定値を読み込む
if RegOpenKey( _key, varptr(_subkey), 0, KEY_READ, varptr(hkey) ) == 0 {
size = 0
if RegQueryValue( hkey, 0, 0, 0, 0, varptr(size) ) == 0 {
sdim buf, size
a = RegQueryValue( hkey, 0, 0, 0, varptr(buf), varptr(size) )
RegCloseKey hkey
_data = buf
return 0 //キーの取得に成功。
}
else {
RegCloseKey hkey
return -2 //取得に失敗。(ほぼ在り得ないと思うが)
}
}
else {
RegCloseKey hkey
return -1 //キーが無いとき
}
0891名前は開発中のものです。2007/05/17(木) 21:46:59ID:lJm49cl1
#define REG_OPTION_NON_VOLATILE 0x00000000 //情報はディスクファイルに保存され、システムを再起動時しても情報は失われません。
#define KEY_WRITE 0x00020006
#define REG_SZ 0x00000001
#defcfunc WriteReg int _key, var _subkey, var _data
hkey = 0 //↓規定値に書き込む
if RegCreateKey( _key, varptr(_subkey), 0, 0, REG_OPTION_NON_VOLATILE, KEY_WRITE, 0, varptr(hkey), 0) == 0 {
if RegSetValue( hkey, 0, 0, REG_SZ, varptr(_data), strlen(_data)+1 ) == 0 {
RegCloseKey hkey
return 0 //書き込みに成功
}
else {
RegCloseKey hkey
return -2 //書き込みに失敗
}
}
else {
RegCloseKey hkey
return -1 //キーのオープンまたは作成に失敗
}
#defcfunc DeleteReg int _hkey, var _subkey
return RegDeleteKey( _hkey, varptr(_subkey) )
#global
#define HKEY_CLASSES_ROOT 0x80000000

前に作ったやつをそのまま。参考に
0892名前は開発中のものです。2007/05/17(木) 23:11:30ID:ECrUiSe6
>>890 >>891
ウォォッ!ありがとう!
激しく参考にさせて頂きます。
('A`)ガンバルゼ
0893名前は開発中のものです。2007/05/18(金) 03:44:38ID:fYCuLcq6
うを、まじかっ
0894名前は開発中のものです。2007/05/18(金) 19:34:18ID:MlFuc+iH
         -―- 、__,
        '叨¨ヽ   `ー-、
         ` ー    /叨¨)
             ヽ,
         `ヽ.___´,     <うを、まぶしっ
            `ニ´


       :::. :      :  ..:::
        :::. :      .  .:::
        ::.. :     :  ..::
         :::.. :.   .:  .::
         :::...  ...  ...::
          ::.....  ...::::
          ∧ ::...::: /
             { ヽ| |ノノ
          _ト、Lj/}
       r<  { | |7ヽ、
       {  ,_ェェ.L⊥.__{ノ、
       j         `}ー'
         }   ――ー-{
         ヽ  --―‐r'
         \_ __. イ
          `ー┴ ´


0895名前は開発中のものです。2007/05/21(月) 15:10:11ID:PlwO7Z3Z
質問よろしいでしょうか? STGの、自機を狙ってくる弾を作りたいのですが
以下の方法だと、角度の精度が、大雑把と言うか、角度によっては弾が当たらない場合もあるのですが
どこがいけないのでしょうか。よろしくお願いします。(HSP3用です)

mx = 320 : my = 320 : ex = 320 : ey = 150 ; 敵味方座標
tx = 0:ty = 0 ; 弾座標
*main
e++ : if e = 60 : tx = ex : ty = ey : gosub *tama_houkou : e = 0
gosub *tama_move
stick k,15
if k&1 : mx-
if k&4 : mx+
if k&2 : my-
if k&8 : my+
redraw 0 : color : boxf
color ,$ff : pos mx,my : mes "▲" ; 自機
color $ff : pos ex,ey : mes "▼" ; 敵
pos tx,ty : mes "●"; 弾
redraw 1 : await 0 : goto *main
*tama_houkou ; 自機の方向を得る
a = ex - mx : b = ey - my
c = atan (a,b)
si = int(sin(c)*4) : co = int(cos(c)*4)
return
*tama_move ; 弾移動
tx+=-si : ty+=-co
return
0896名前は開発中のものです。2007/05/21(月) 15:18:49ID:L/tljOSY
intしてるからだろ
0897名前は開発中のものです。2007/05/21(月) 15:46:33ID:6fZCE0Or
>>895
0.1*4と0.2*4を整数にしたら幾つだ?
0898名前は開発中のものです。2007/05/21(月) 16:36:11ID:uOzhhUKS
整数と実数の扱いがどうもよく分からんので
今だに <<8 だの >>8 してるわモレ('A`)
08998952007/05/21(月) 16:36:22ID:PlwO7Z3Z
>>896さん、897さん
お早い回答、有難うございます。上手くいきました

intを外す事も試してみましたが、結果は同じで、何故だろうと思いましたが
上の場合、敵味方の座標も、小数型にしておかなければいけなかったのですね
先に下の文を参考に作ったので、気付きませんでした。

#define DtR 0.017453293 ; 度 -> ラジアン
mx = 320 : my = 240
*main
redraw 0
color : boxf
color ,$ff : pos mx,my : mes "▲"; 自機
color $ff : pos ex,ey : mes "●" ; バリア
redraw 1
a++ : if a = 360 : a = 0
rok = DtR*a
si = int(sin(rok)*100) : co = int(cos(rok)*100)
ex = mx+si : ey = my+co
await 0 : goto *main
0900名前は開発中のものです。2007/05/21(月) 19:57:48ID:4L3YMMMs
質問させていただきます
アクションゲームを作っているのですが
「→,↓,←,」のキーを押し続けると
「-->スタック領域のオーバーフローです」
のエラーが出ます
「移動、ジャンプ、ダッシュ、座り」
等の行動まで出来るようになった段階では問題なかったのですが
「攻撃」を加えた後でエラーが出るようになりました
「攻撃」関係の部分を全て消しても同じエラーが出ます
「攻撃」を加える前は同じ操作をしても
エラーは出なかったはずですが勘違いかもしれません

自分で調べられる範囲で調べてみたのですが
サブルーチンと式が間違っているらしいことはわかったのですが
指摘されている部分を見ても具体的に何が間違っているのかわかりません
( if zky=1 and atacktime=0 :atacktime+=1)
上が指摘された部分なのですが
根本的に、エラー「スタック領域のオーバーフロー」が何故出るのか解りません
長文かつ基本的な質問をしているのかもしれないのですが
もし解る方がいらっしゃいましたら教えてもらえないでしょうか
他に書くべき事がある場合も指摘してもらえると助かります
よろしくお願いします
0901名前は開発中のものです。2007/05/21(月) 20:27:48ID:z34WPkiM
>>900
大抵サブルーチンからgotoとかしてメインに戻ってたり
ループからブレイク無しでループの外に行ってたり
新規命令やサブルーチンを同じ新規命令やサブルーチン無限に呼んでたり
とかだな

>指摘されている部分を見ても具体的に何が間違っているのかわかりません
エラーで出る行番号は目安ぐらいにしかならない(特に3.0aは)
後、エラーエログも正確じゃない(特に3.0aは)
0902名前は開発中のものです。2007/05/21(月) 20:30:21ID:z34WPkiM
新規命令やサブルーチン内から同じ新規命令やサブルーチンを無限に呼んでたり

だな・・・
0903名前は開発中のものです。2007/05/21(月) 20:46:15ID:4L3YMMMs
>>901

ありがとうございます思い当たる部分もあるのでチョットいじってみます

似たような質問で申し訳ないのですが
例えば
*sub ;(サブルーチン)
if (〜) :goto *nuke
(サブルーチン命令)
*nuke
return
の様にサブルーチン内で gotoを使って命令を飛ばすのは
何か問題があるのでしょうか?
0904名前は開発中のものです。2007/05/21(月) 21:30:46ID:z34WPkiM
>>903
サブルーチンネストの限界(128?)まで行かなければいいので
gotoでジャンプすること自体は問題ない、901でもメインって言ってるだろ?
(普通メイン内にreturnなんて置かないじゃん)

ネストってーのは
gosub *A
stop
*A
gosub *B
return
*B
return

ってなってた場合*Aに飛んだときにネスト1になって
更に*Bに飛ぶとネスト2になる、returnするとネスト1になって
gosub *Bの次の行に飛ぶ

これは、gosub で飛んだ物は戻る場所を保存してるからで
だからreturnするだけで飛んだ逆順にジャンプ元に戻ることが出来る
でも戻り先を保存できる個数には制限があってそれが128個

>何か問題があるのでしょうか?
問題があるとすれば、読みにくくなる、バグの元になる
(gotoで飛んでreturnしてたら自分でも訳分からなくならない?)
特別な理由が無ければサブルーチン内で決着を付けた方が良いと思う
*sub ;(サブルーチン)
if (〜) {gosub *nuke :return}
とか
0905名前は開発中のものです。2007/05/21(月) 21:54:57ID:u6L0+dFc
サブルーチンなんて使わずに全部関数で処理すれば問題ない
0906名前は開発中のものです。2007/05/21(月) 22:14:17ID:z34WPkiM
>>905
おいおい
そう言う問題じゃねーだろ
新規関数内から同じ関数呼ぶのもネストの問題は解消できないのにw
分かった上で使わないと結局後で同じような問題で詰まるよ
0907名前は開発中のものです。2007/05/21(月) 22:58:11ID:TYL2/hnH
Dr.デバッグ「構造化プログラミングですぞ」
0908名前は開発中のものです。2007/05/21(月) 23:01:13ID:MgK7IWd+
オブジェクトHSPとか出たらいいのにね。
09099002007/05/22(火) 02:31:24ID:jdPp968J
>>904
返事遅くなってすいません
解りやすい説明ありがとうございます
コレで問題可決できそうです
本当にありがとうございました
0910名前は開発中のものです。2007/05/22(火) 03:25:14ID:w8FHk1Gb
>>903
>if (〜) :goto *nuke
>(サブルーチン命令)
>*nuke
>return
の*nuke〜return間に何も無いなら
飛ぶ必要がないぞ

if (〜) :return
(サブルーチン命令)
return

これで事足りる
途中で抜ける方に return -1
最後まで行く方に return 0
ってやっておくと

gosub *sub
if stat<0 :mes "エラー"

とか出来る

後、サブルーチン内にデータ渡して処理したくなったら
マクロ、新規命令、新規関数、モジュールとか覚えれば色々便利
0911HSP32007/05/22(火) 12:06:38ID:8kCRlLEp
かなり初歩的な質問かもしれませんが、

背景画像をずっと表示しっぱなしで、
bufferでID2ウインドウにキャラ画像読み込んで
そのキャラを移動させた時に、boxfなどで塗りつぶすともちろん背景消えますよね?

でも塗りつぶさないと一度表示されたキャラが移動しても消えないので
移動すればするほどペンでなぞったみたいに繋がります・・・。

まとめますと
・背景は表示しっぱなし。
・キャラを表示、stickなどで動かせる。
・背景だけ消さずにキャラを一度消して、移動先で再描写。

こういう場合どうすればよいでしょうか?・・・。
boxfで一度消すやりかたで、背景なしだったら出来ます。
0912名前は開発中のものです。2007/05/22(火) 12:14:55ID:2Jc5HiBL
>>911
boxfの代わりに、背景をコピーしる。
つまり、背景画像用のスクリーンバッファか領域が必要。
0913HSP32007/05/22(火) 12:32:02ID:8kCRlLEp
>>912
さっそくありがとうございます!
まだいまいち頭では解っていませんが、
ヒントになりました!

背景をコピーする考えでやってみまう!
0914名前は開発中のものです。2007/05/22(火) 13:17:28ID:w8FHk1Gb
>>913
buffer 1
picload dir_exe+"\\sample\\demo\\sky_bg.jpg"
buffer 2
picload dir_exe+"\\sample\\game\\shootchr.bmp"
gsel 0

repeat
redraw 0 ;redraw命令はは必ず表示ウィンドウが操作先になってる必要がある
gmode 0
pos 0,0 :gcopy 1,0,0,640,480
stick k,$f
if k&1{x-2}
if k&4{x+2}
if k&2{y-2}
if k&8{y+2}
gmode 2
pos x,y :gcopy 2,0,0,128,64
redraw 1
await 10
loop

ウィンドウ上に表示した物を動かす場合は
基本的に背景で使ってる画像で上書きする

殆んどのフレームで動きがあるよな物なら毎フレーム
背景コピー>キャラコピー と自分で処理するのが普通
(ツクールとか使ってた人が良く戸惑う・・・)
0915HSP32007/05/22(火) 13:31:10ID:8kCRlLEp
>>914
めちゃくちゃ親切にどうもです><

もろ解りでした!
本当、根本的な捕らえ方が違ってたみたい・・・
頭が柔らかくなりました。ありがとうございました!
0916HSP32007/05/22(火) 17:19:48ID:8kCRlLEp
911で質問した者ですが、お陰様で画面の表示方法は一通り解ったんですが
また新たに疑問が出来たので、お暇な方が居れば教えてください

キャラを操作する時の"初動動作スピード"の事なんですが、
例えば→にキャラを進める場合
キー押し始めはゆっくりで、すぐさま最高スピードになって、
キーを放してもすぐには止まらないようにしたいのですが
どうすればいいんでしょうか・・・?

キャラの表示は>>914で教えてもらった感じにしてるのですが
試行錯誤してもよくわかりません、どうか教えてくださいませ・・・。
0917名前は開発中のものです。2007/05/22(火) 17:24:25ID:rss6mlVc
ヒント >>538-545
0918HSP32007/05/22(火) 17:28:23ID:8kCRlLEp
>>917
ごめんなさい、よく読んでなかった・・・
HSPが出来ないのもこういう性格だからですね・・・

気をつけます!そして、ありがとうございました!
0919名前は開発中のものです。2007/05/22(火) 20:35:53ID:8jBGKr9t
ホントに”試行”錯誤したのかと
0920名前は開発中のものです。2007/05/22(火) 22:57:11ID:BQr1kKD8
思考錯誤してんじゃね?
0921名前は開発中のものです。2007/05/23(水) 00:49:49ID:hC7KHRHo
>>916
x方向への移動量をdxとする。最高スピードをmaxdxとする。例えば、
・→が押されているなら、dx=dx+1。ただしdx>=maxdxなら増やさない。
・→が押されていないなら、dx=dx-1。ただしdx=0なら減らさない。
もちろんx方向への移動はx=x+dxだ。

>HSPが出来ないのもこういう性格だからですね・・・
うむ。素直ないい子じゃないか。ちんこをうpしてくれたらもっと手取り足取り教えてやって
もいいぞ。
0922名前は開発中のものです。2007/05/23(水) 03:43:11ID:IDKpuKz2
>>930
ちょwwwそれどう見ても40代オサンのちんpだろwww
0923名前は開発中のものです。2007/05/23(水) 08:54:07ID:Rf4xQAdP
ちょwwwどこの誤爆だwww
0924HSP32007/05/23(水) 09:32:21ID:/1RWwi8L
だめだ;;いくらやってもまじわかんない;;
誰か 914のソースで
→と←を押した時だけ916で言った通りにして貰えないだろうか?・・・

すごく優しく教えてもらってるのに、全然わかんない・・・
これだから単細胞は・・・

>>921
ありがとう!言ってる意味はすごく分かったけど、
多分こちらの捕らえ方が悪いんだろうけど、その感じでやってみると
maxdxに到達した時にそれ以上進まない・・・なんでだ・・・
むしろ、dx+1がmaxdxの数値(たとえば5なら)5までただ1を足すだけで
だんだんと加速する感じが出ないッス・・・

説明すらムズイ;;あと包茎なんで勘弁して下さい;;
0925名前は開発中のものです。2007/05/23(水) 12:40:32ID:8t6+q2xE
>>924

x = 320.0 : vx = 0.0
y = 240.0 : vy = 0.0
repeat:redraw 0

getkey k,37:if k : vx -= 5.0
getkey k,39:if k : vx += 5.0
getkey k,38:if k : vy -= 5.0
getkey k,40:if k : vy += 5.0
x = x+vx
y = y+vy
if x < 0.0 : x = 640.0
if x > 640.0 : x = 0.0
if y < 0.0 : y = 480.0
if y > 480.0 : y = 0.0

color 255,255,255:boxf
color 0,0,0:pos x,y:mes "★"
redraw 1:wait 10:loop

最大速度は自分でやってみそ
0926名前は開発中のものです。2007/05/23(水) 12:46:17ID:y5iF8WqO
;包茎に免じて。 >914の「gsel 0」以降を差し替え
dim dx,16:dim dy,16:repeat 16:dx(cnt)=((cnt&4)>0)-((cnt&1)>0):dy(cnt)=((cnt&8)>0)-((cnt&2)>0):loop
repeat
redraw 0
gmode 0
pos 0,0 :gcopy 1,0,0,640,480
stick k,$f:k&=$f
if dx(k) { xz+=dx(k) } else { xz -= limit( ((xz>0)-(xz<0)) , -10,10 ) }
x+=xz:if ( (x>640)|(x<-128) ) { x-=xz:xz=-xz }
y+=dy(k)*2
gmode 2
pos x,y :gcopy 2,0,0,128,64
redraw 1
await 10
loop
0927名前は開発中のものです。2007/05/23(水) 19:29:55ID:3+8L0L1n
包茎には優しいな
0928名前は開発中のものです。2007/05/23(水) 20:51:34ID:y5iF8WqO
あー、いま見たら間違ってるな。スマン >包茎

if dx(k) { xz+=dx(k) } else { xz -= limit( ((xz>0)-(xz<0)) , -10,10 ) }
のとこ、

if dx(k) { xz+=dx(k) } else { xz-= ((xz>0)-(xz<0)) }
xz = limit( xz , -20,20 )
とでもしてやっておくれ。
0929名前は開発中のものです。2007/05/23(水) 23:14:55ID:2ubFRilY
>>924
maxdxに到達した時にそれ以上進まない・・・なんでだ・・・
pos x+dx.y とかやってないか?w
//←→だけ加減速度付きサンプル
buffer 1
picload dir_exe+"\\sample\\demo\\sky_bg.jpg"
buffer 2
picload dir_exe+"\\sample\\game\\shootchr.bmp"
gsel 0
x=0.0:y=0.0:dx=0.0:dy=4.0:maxdx=10.0
repeat:redraw 2
gmode 0:pos 0,0 :gcopy 1,0,0,640,480
color 255,255,255
mes "x="+x+" dx="+dx:mes "y="+y
stick k,$f
if (k&5)=0 {;左右キー入力が無ければ減速
if int(dx)!0 {;dxが1未満ならdxを0に近づける
if dx>0.0 {dx=limitf(dx-0.3,0,maxdx)}else{dx=limitf(dx+0.3,-maxdx,0)}
}else{dx=0.0}
}else{
if k&1 {dx=limitf(dx-0.5,-maxdx,maxdx)}else:if k&4 {dx=limitf(dx+0.5,-maxdx,maxdx)}
}
if k&2 {y-dy}else:if k&8{y+dy}
x=limitf(x+dx,0,512) ;x+dxを0.0〜512.0に収める (実数型用)
y=limitf(y,0,416)
gmode 2:pos x,y :gcopy 2,0,0,128,64
redraw 1:await 10:loop
0930名前は開発中のものです。2007/05/23(水) 23:17:43ID:2ubFRilY
あら、一行目に > やるの忘れた・・・
まぁいっかw
0931名前は開発中のものです。2007/05/23(水) 23:44:29ID:8t6+q2xE
まぁ、普通に空気抵抗みたいな力でおk
0932HSP32007/05/25(金) 06:01:06ID:AURAMUwd
>>925-931
返事が遅れまくりで申し訳ないです・。・
みなさんのを試しに実行してみたら
すごく僕の望んでたモノになったとです!
これらを改良してみますね。ありがとうございました

アニメーション表示まで出来て
後は敵とマップに関してが残った大きな仕事になりました。
みなさんのお陰です\(^o^)/
09339292007/05/25(金) 09:41:51ID:xVqJ1N/T
コメント間違ってた
>if int(dx)!0 {;dxが1未満ならdxを0に近づける
0未満を0.0に
0以外ならdxを0に近づけるだな・・・
レス数が900を超えています。1000を超えると表示できなくなるよ。