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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1208
フワット・ベベawait命令の、説明文がわかりません。9解決


フワット・ベベ

リンク

2012/12/8(Sat) 17:59:40|NO.51067

await。使う分には何も困ってはいませんが、awaitの説明文が何を言ってい
るのかわかりません。
私は、『12歳から始めるHSP3.0〜』の本を読みながらプログラムの勉強中
なのですが、分からない説明文は以下の部分です。
***********************
await命令では、「前回await命令を実行した時点」
を計り始めとして、指定した時間待機する。
***********************

本には図解も載っているのですが、やはり分かりません。
何が「前回await命令」なのか、何が「計り始め」なのか、
「指定した時間」とは何か、が
全然分かりません。

 それがよく分からないので、不安もあります。
 例えばメインループするプログラムで待ち時間を【await 50】とした場合、
プログラムの処理にかかる時間が、await命令の0.05秒を超えてしまったら
どうなるのか、分からない不安があります。



この記事に返信する


kanahiron

リンク

2012/12/8(Sat) 18:57:34|NO.51068

waitは、実行された時点でその指定された時間分だけ、プログラムが止まります

対してawait命令はそのプログラムでawaitが初めて実行された時にはwaitと同じで、
指定された時間分プログラムが止まります

が、2回目にawaitが実行された時、
awaitは、(前回awaitが実行された秒数+指定された時間)の時まで止まります
このことは以下のプログラムで分かり易いでしょう

#uselib "winmm" #cfunc msec "timeGetTime" randomize st = msec() ;現在の時間を取得 wait 100 ;wait 100 で一秒止まる en = msec() ;現在の時間を取得 mes "wait100は\t\t"+(en-st)+"\tmsでした" ;止まった時間を表示 st2 = msec() await 1000 ;await 1000 で一秒止まる en2 = msec() mes "await1000は\t\t"+(en-st)+"\tmsでした" mes wait 100 mes "ここまでは同じ動きです" mes wait 300 cls mes "重い処理をしてみましょう" wait 200 screen 1,256,256 st = msec() repeat 5 repeat 4096 color rnd(256),rnd(256),rnd(256) boxf rnd(256),rnd(256) color rnd(256),rnd(256),rnd(256) circle rnd(256),rnd(256) color rnd(256),rnd(256),rnd(256) line rnd(256),rnd(256) loop wait 100 ;1秒を5回止まります loop en = msec() gsel 1,-1 gsel 0,1 mes "waitで重い処理にかかった時間は\t"+(en-st)+"\tmsでした" mes "一秒を5回ループで5000msくらいのはずですが全く違います" mes wait 200 mes "awaitで同じ事をします" mes wait 200 screen 1,256,256 st = msec() repeat 5 repeat 2048 color rnd(256),rnd(256),rnd(256) boxf rnd(256),rnd(256) color rnd(256),rnd(256),rnd(256) circle rnd(256),rnd(256) color rnd(256),rnd(256),rnd(256) line rnd(256),rnd(256) loop await 1000 ;1秒を5回止まります loop en = msec() gsel 1,-1 gsel 0,1 mes "awaitで重い処理にかかった時間は\t"+(en-st)+"\tmsでした" mes wait 200 mes "これでわかるでしょうか await は指定された時間分止まるのではなく、\n前回awaitが実行された時間から、awaitで指定された時間分止まるということです" mes wait 200 mes "また、awaitの時間がオーバーしてしまったときは、awaitは「await 0」として働きます\nプログラムが中断されるということはありません"
中身は読まなくていいのでそのまま実行してください



fortunehill

リンク

2012/12/8(Sat) 20:31:20|NO.51069

/*awaitのお仕事はメッセージ処理に時間を与える程度に思っていればいいと思います*/
/*下記が多分大方同じような処理?*/

#include "user32.as" #include "kernel32.as" dim Mesg,7 *@ :title ""+_DoEvents(10) :goto *@b stop #defcfunc _DoEvents int p1 PeekMessage varptr(Mesg),0,0,0,1 if (stat) {if (Mesg(1) != $12) {TranslateMessage varptr(Mesg) DispatchMessage varptr(Mesg)}} sleep p1 return Mesg(1)



(´ω`)

リンク

2012/12/12(Wed) 17:44:44|NO.51100

横レスですが。

知らんかったあああああ!
wait命令の、分解能が細かいver.だと思ってたああああああああ!
ちょっとプログラム見直ししてくる!(u゚ω゚ )



@key

リンク

2012/12/12(Wed) 19:03:50|NO.51104

まあ簡単に言うと、
wait・・・・単純に一定時間とめる
     ゲームで処理落ちが発生すると、スローになる
await・・・描画に遅延が発生するとき、awaitの値を調節し描画を減らして計算部分のFPSを一定にたもつ
     ゲームで処理落ちが発生してもカクカクするだけでスローにはならない

ゲームなど描画を頻繁に使うならawaitがいい
ツールみたいな描画関連をほとんど使わない時はwaitのほうがおすすめ



フワット・ベベ

リンク

2012/12/18(Tue) 15:54:10|NO.51251

返信おくれました。すみません。

丁寧にプログラムまで書いていただき、ありがとうございます。
実行してみて時間を計ったりしてみました。
動き方の違いはわかりました。waitとawaitでは、動き方がまったく、
まったく、違いました。

ですが、すみません。私の頭ではどうしても、『前回awaitが実行された時間から、
awiatで指定された時間分止まる』の”文章部分”を理解できませんでした。

私が解釈した内容を文章で書くと、こうなりました。↓
◎wait命令では、wait100とすると1ループで『プログラムが止まる時間』が約1秒であって、
プログラムが流れる時間は含まれていない。だから、
【実際の1ループ時間】=【プログラムが流れる時間】+【waitの指定時間】
になっている。
だから、プログラムが長ければ長いほど時間がかかってしまうので、スピード感がいるゲーム
制作には向かない。

◎await命令では、await1000とすると【プログラムが流れる時間】も含まれて1ループが約1秒。
【実際の1ループ時間】=【awaitの指定時間】
になっている。

・・・・・・
と、こんな感じで解釈しているのですが……。



ppr

リンク

2012/12/18(Tue) 17:12:51|NO.51252

私も初めて知りました。
要するに処理する速度を自動的に調節してくれるのですね?
それなりにプログラムの負担が大きければ、それに合わせて自動的に調節してくれるみたいな感じ



フワット・ベベ

リンク

2012/12/18(Tue) 19:09:21|NO.51257

私の勝手に解釈の追加を。
・・・・・・
awaitの場合は、【実際の1ループ時間】=【awaitの指定時間】だから
スピードが必要なゲーム製作には適してるけど、画像を表示しっぱなしを
メインとしたツール(?)製作(例えば、時計の表示とか)には適さない。



暇人

リンク

2012/12/18(Tue) 20:28:17|NO.51261

>メインとしたツール(?)製作(例えば、時計の表示とか)には適さない。
なぜ?

waitは必ず指定した待ち時間以上待ちたい時に使う
awaitは使える処理時間(秒間60フレームなら約16ms)の余った分だけ待つ時に使う

時計ならむしろawaitのが向いてる(まぁ、ウェイト命令だけで時計作るのは無理があるが・・・)



フワット・ベベ

リンク

2012/12/24(Mon) 19:57:43|NO.51377

本などに載っているwait命令とawait命令の説明文の意味はわからないままでしたが、
wait命令とawait命令の”見かけ”の違いは分かったので、締め切ります。
ありがとうございました。



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