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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0329
ミント違う音楽を再生しようとすると、重くなる5解決


ミント

リンク

2010/3/29(Mon) 15:06:50|NO.31628

どーもお久しぶりです。そうでない方は始めまして。
あれからSTGを作っておりましたが、音楽でつまづいてしまいました。

それと「getkey」についてお聞きしたいと思い、質問することにしました。

なお、本プログラムは長いため、サンプルプログラムをお出しします。



  ---流れ---
道中の音楽が流れています。

ボスとの会話で、キーボードのAを押すと会話が進みます。
そして(ボス戦が始まります)が表示されるのと同時に、音楽を切り替えます。


  ---仕様---
・カーソルキーで自機を動かせます。
・「A」キーで会話を進められます。
・「HSP MULTIMEDIA( hmm.dll ) 1.42」を使用しております。


---プログラム--------------------------

#include "hmm.as" ;音声合成 ;初期化モード hmminit 1 ;BGM dsloadfname "恋した.wav",1 ;音楽読み込み,1 dsplay 1 ;1 を再生 screen 0,380,450 ;サイズ ;時機 myx=180 ;自機のx座標 myy=400 ;自機のy座標 ;スピード mySpd = 3 ;myspdは 3 ;****************メインループ************************* *メイン redraw 2 ;描画モードのみを変更し画面の更新はされない color 20,20,20 ;背景の色 boxf gosub *自機の移動 gmode 2 ;画面コピーモード,透明色付きコピー pos myx,myy ;自機の座標 color 255,255,255 ;自機の色(白 mes "■" ;自機表示 ;@@@お悩み1@@@ getkey akey,65 ;Aキー if akey : qw=qw+1 ;Aが押されたらqwに1を足す→qw=1 pos 50,100 ;Aカウンターの場所 color 255,0,0 ;赤色 mes qw ;Aカウンター(プログラマーチェック用) ;1以上 pos 20,355 ;文字の位置 if (qw >= 9):pos 20,555 ;9以上の場合,文字を擬似的に見えなくする if (qw >= 1): mes "1段目" ;メッセージ ;10以上 pos 20,355 ;文字の位置 if(qw >= 10)&(akey) if(qw >= 10): mes "(ボス戦が始まります)" ;メッセージ ;@@@お悩み1@@@ ;\\\お悩み2\\\ ;BGM2 ;恋した if(qw == 5) : DSSTOP 1 ;5と均しかったら,1番の音楽ストップ if(qw == 10) : dsloadfname "おてんば2.wav",2 ;読み込み,2 if(qw == 10) : dsplay 2 ;2 を再生 ;\\\お悩み2\\\ redraw 1 ;今まで仮想画面に描かれていたものをウインドウ0に描画 redraw ;画面には反映されない await 10 ;待つ goto *メイン ;メインに戻る ;****************自機の移動*************************** *自機の移動 stick ky,15 ;キー取得 if ky & 1 : myx- = mySpd ;←が押された場合 if ky & 4 : myx+ = mySpd ;→が押された場合 if ky & 2 : myy- = mySpd ;↑が押された場合 if ky & 8 : myy+ = mySpd ;↓が押された場合 return
------------------------------------------------

 【1】
まず、わからない所は、31行目の「;@@@お悩み1@@@」の所。


getkey akey,65 ;Aキー if akey : qw=qw+1 ;Aが押されたらqwに1を足す→qw=1

となっておりますが、このままだと「A」をずっと押していると
どんどん会話が進んでしまいます。

「getkey」の場合「stick」と違い「非トリガータイプキー指定」
が出来ないようなので、ずっと「A」が押されていても、
一回しか反応しない方法はありますでしょうか?


 【2】
次に、わからない所は、50行目の「;\\\お悩み2\\\」の所。

ここでは、1の音楽を止めて、2の音楽を再生しようとする所で
自機が動こうとすると、重くなってしまいます。
(動かなくても重い)

ただし、一気に「A」を押しっぱで重くなるを誤魔化せます(だからどうした
この場合どうやったらこの問題を解決できますでしょうか?



一気に2つの質問をさせていただきましたが、
わかる方いらっしゃいましたら教えてください><
それではよろしくお願いします。



この記事に返信する


Him

リンク

2010/3/29(Mon) 15:41:21|NO.31630

時間がないので【1】だけ

dim key repeat getkey akey,65 if akey { if key = 0 : qw++ key = 1 } else { key = 0 } redraw 0 syscolor boxf color pos 0, 0 mes qw redraw 1 await 10 loop



いかろ

リンク

2010/3/29(Mon) 17:06:19|NO.31631

hmmは使ったことないので、正しいか分かりませんが、重くなっている原因は再生時に
ファイルを読み込んでいるためだと思います。
最初に曲を全部読み込んで再生したいところでdsplayを使えばいいのではないでしょうか?



ミント

リンク

2010/3/29(Mon) 18:22:10|NO.31632

>Himさん
おおー、いい感じですね〜。

ってぎゃー!
塗りつぶされて自機見えぬ。
まーとりあえず、レス見たっていう返事だけしときます。

色々試して直せたら【1】解決な方向で。



ミント

リンク

2010/3/29(Mon) 18:32:28|NO.31633

>いかろさん
>重くなっている原因は再生時にファイルを読み込んでいるためだと思います。
>最初に曲を全部読み込んで再生したいところでdsplayを使えばいいのではないでしょうか?
試してみたら、あらびっくり。
素直に動作することができました!

ありがとうございます!



ミント

リンク

2010/3/30(Tue) 21:43:38|NO.31676

どーもこんばんは。
遅くなってしまい申し訳ございません。

あれから、色々試行錯誤をした結果、
正常に作動しつつ、やりたいことが出来るようになりました!


Himさん。
サンプルプログラムありがとうございました!



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