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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
1109
sasaスピードアップ8解決


sasa

リンク

2020/11/9(Mon) 22:06:44|NO.91771

開始時はスピードが2で10秒後にスピードを3にしたいのですが、最初からスピード3になってしまいます。
どこを直せばよいかわからないため、皆さんに教えていただきたいです。
よろしくお願いします。

wx=500:wy=500 ; 画面サイズ
screen 0,wx,wy
color 0,20,100:boxf 0,0,500,500

;●
gx = 80:gy = 150;初期位置XとY
dx = 2:dy = 2 ;移動量XとY

n=120-(counter/60)
if n/10{ ;10秒後
n<5 & n>0 : dx=3:dy=3 ;5秒間スピードを3にする
}
;120秒間
countermax=120*60
counter=1

*start
redraw 0 ; 画面更新開始
color 0,20,100:boxf 0,0,500,500

;●
gx + dx
gy + dy
;画面外へ出たら方向転換
if(gx < 0 | gx > 470) {
dx *= -1
}
if(ky < 0 | gy > 470) {
dy *= -1
}
pos gx - 7 , gy - 7
color 255,255,255:gmode 4,0,0,256 ;画像背景の透明化
color
mes "●"

;タイマー
color 0,0,0
pos 0,570:font"MS ゴシック",20:mes "残り:"+((120-(counter/60))+"秒")
redraw 1 ; 画面更新終わり
counter++ ;カウンターの値を常に増やす
frame++ ; フレームを進める
goto *start ; 繰り返す



この記事に返信する


ゆうやん

リンク

2020/11/9(Mon) 22:39:23|NO.91772

実行していないのでわかりませんが、waitとawaitは必ず入れた方がいいですよ。
あと、ループの間にfont命令を入れておくと、フォント読み込みの繰り返しになり、PCが重くなる可能性があるので、ループ前にfont命令を入れた方が良いと思います。



沢渡

リンク

2020/11/10(Tue) 12:11:43|NO.91774

こんな感じでやってみましたが、どうでしょうか?


#define ctype plu_min(%1) ((((%1)>0)*2-1)*((%1)!=0)) //%1がプラスなら1を、0なら0を、マイナスなら-1を返す関数 wx=500:wy=500 ; 画面サイズ screen 0,wx,wy color 0,20,100:boxf 0,0,500,500 ;● gx = 80:gy = 150;初期位置XとY dx = 2:dy = 2 ;移動量XとY ;120秒間 countermax=120*60 counter=0 font msgothic,20 *start repeat title str(counter/60) if counter>=countermax : break //120秒経過したら終了 redraw 0 ; 画面更新開始 color 0,20,100:boxf 0,0,500,500 //スピード変化処理はループの中に入れないと意味がない //以下、プラス・マイナスの符号はそのままで速度を変化させる if counter=600 : dx=plu_min(dx)*3 : dy=plu_min(dy)*3 //600フレーム目(10秒後)に速度を3にする if counter=900 : dx=plu_min(dx)*2 : dy=plu_min(dy)*2 //900フレーム目(15秒後)に速度を2に戻す ;● gx + dx gy + dy ;画面外へ出たら方向転換 if ((gx<0)&(dx<0)) | ((gx>470)&(dx>0)) : dx*=-1 if ((gy<0)&(dy<0)) | ((gy>470)&(dy>0)) : dy*=-1 pos gx - 7 , gy - 7 color 255,255,255:gmode 4,0,0,256 ;画像背景の透明化 //←これが何のための処理かよくわかりませんが、そのままにしておきます color mes "●" ;タイマー color 0,0,0 pos 0,570:mes "残り:"+((120-(counter/60))+"秒") redraw 1 ; 画面更新終わり counter++ ;カウンターの値を常に増やす frame++ ; フレームを進める await 16 //秒間60フレームになるようにウェイトをかける。(1000/60≒16) loop ; 繰り返す



sasa

リンク

2020/11/11(Wed) 23:55:38|NO.91784

ゆうやんさん

回答していただきありがとうございます。
体調を崩してしまい返信が遅くなってしまいました。すみません。

確かに軽くなりました!
ありがとうございます。



sasa

リンク

2020/11/12(Thu) 00:01:40|NO.91785

沢渡さん

回答していただきありがとうございます。
遅くなってしまいすみません。

説明を付け加えながらプログラムを書いてくださり大変わかりやすいです!ありがとうございます。
スピードを10秒経過後だけでなく、30秒、50秒、70秒…経過した際にも3にするためにはどうすればよいのか再度教えていただきたいです。
よろしくお願いいたします。



あらや

リンク

2020/11/12(Thu) 07:14:51|NO.91786

>スピードを10秒経過後だけでなく、30秒、50秒、70秒…経過した際にも3にする
単純に20秒ごと(1200フレーム)に変更するのですから
フレーム数を1200で割った余りが600になったときに3にするといいのではないでしょうか。

スピードを2に戻すのも常に5秒後だとすると、
同じようにフレームを1200で割って余りが900になるときにすれば良いかと。



sasa

リンク

2020/11/13(Fri) 02:11:44|NO.91793

あらやさん

回答していただきありがとうございます。
私の理解力不足で何度も説明を読み返していろいろ試してみたのですができませんでした…
どうすればできるか教えていただきたいです。
再度すみませんがよろしくお願いいたします。

if counter=600/1200 : dx=plu_min(dx)*3 : dy=plu_min(dy)*3 //600フレーム目(10秒後)に速度を3にする
if counter=900/1200 : dx=plu_min(dx)*2 : dy=plu_min(dy)*2 //900フレーム目(15秒後)に速度を2に戻す



あらや

リンク

2020/11/13(Fri) 02:32:38|NO.91794

沢渡さんのソースを使わせていただくと
>if counter=600 : dx=plu_min(dx)*3 : dy=plu_min(dy)*3 //600フレーム目(10秒後)に速度を3にする
>if counter=900 : dx=plu_min(dx)*2 : dy=plu_min(dy)*2 //900フレーム目(15秒後)に速度を2に戻す
この2行のif文を

if counter\1200=600 : dx=plu_min(dx)*3 : dy=plu_min(dy)*3 //600フレーム目(10秒後)に速度を3にする if counter\1200=900 : dx=plu_min(dx)*2 : dy=plu_min(dy)*2 //900フレーム目(15秒後)に速度を2に戻す
このように変更するだけです。

「\」が余りを算出する記号という事を理解されていれば理解しやすいかと思います。



sasa

リンク

2020/11/13(Fri) 14:42:08|NO.91795

あらやさん

¥があまりを算出できる記号だったんですね!
無事できました!ありがとうございます!

回答していただいたゆうやんさんと沢渡さんもありがとうございました!



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