[過去ログ] ゲームプログラミング相談室【Part5】 (970レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
797
(1): 788 03/12/29 01:09 ID:EhxFp05R(2/3) AAS
>>794
またまたすみません。
上のプログラム参考にして考えてみたのですが
キーが離れたときの判定の仕方はどうすればいいのでしょうか?
798: 03/12/29 02:10 ID:hxW8tM+Y(1) AAS
//宣言
BOOL PushKey[256];

//Set
WM_KEYDOWN:PushKey[wParam]=TRUE;break;
WM_KEYUP:PushKey[wParam]=FALSE;break;

//条件
if(PushKey[VK_何たら]){
省2
799: 03/12/29 02:11 ID:9w54kjof(1) AAS
一つ前の状態を覚えておいて前回が押しで今回が離しなら条件成立。
でいいんでないかい?

っていうかこの状態ですでに聞きまくりだと、後で困るよ。
聞く前にまず何通りかの方法を自分で考えてみたほうがいい。
800: 788 03/12/29 02:40 ID:EhxFp05R(3/3) AAS
そういうやり方があったんですか。さっそくやってみますね。
色々ご指導ありがとうございましたー。
801: 03/12/29 10:35 ID:Vxcs8OWB(1) AAS
ON
___| ̄ ̄ ̄|__
OFF

てな感じで、紙に書いてどんなタイミングだと、
「押した瞬間」や「離した瞬間」と判断できるか、シミュレートしてみるといいよ
802
(1): 03/12/29 11:56 ID:7K1ivY4a(1/2) AAS
状態用意しなくても
GetAsyncKeyStateでいいやん
803
(1): 03/12/29 17:02 ID:18lQqtmb(1) AAS
>802
え?状態用意しなくても過去のキー情報か離した瞬間を検知するものがあるん?
804: 03/12/29 17:12 ID:gqFMSN3K(1/2) AAS
GetKeyboardStateもいいよね〜
805
(1): 03/12/29 17:40 ID:7K1ivY4a(2/2) AAS
>>803
要件は「押している間」だけだろ?
その瞬間を検知する必要があるわけではない。

さらに>>791とか見てもキー押下イベントを受け取りたいわけじゃなくて
状態をポーリングしてるんだからKeyState系のAPIだけで十分。
806: 03/12/29 18:31 ID:YOFpqX8j(1) AAS
>>805
>>797
807
(1): 03/12/29 20:18 ID:byuoOUNe(1) AAS
新米プログラマ「キーが押されている状態をチェックする方法は分かったんだ。
だけど、今度はキーが押されていない状態のチェックする方法がないんだ!」
新日プログラマ「キーが押されている状態の逆をやればいいんだよ」
新米プログラマ「逆?」
808
(1): 03/12/29 20:32 ID:gqFMSN3K(2/2) AAS
押されているならば、その状態を変数に記録、
押されていないならば、変数を調べて押されていたか知ればいい
こんな感じで

bool key;
...
if(GetKeyCheck() == true){ // GetSKeyCheck() : キーが押されているか? 押されているならtrue、押されていないならfalseを返す
 key = true;
省8
809: 03/12/29 20:56 ID:R24Z9q+x(1) AAS
>>807
BlackBoxキタ━━━━━━(゚∀゚)━━━━━━ !!!!!
810
(1): 03/12/29 21:25 ID:LZHqhzbl(1) AAS
キーボードは大気にふれている限り、気圧によって圧されているのだよ。
811: 03/12/29 21:29 ID:TqzRIVhA(1) AAS
>>810
IDがlzh
812: 03/12/30 08:54 ID:cbrmbjiy(1) AAS
IDまで圧されたかw
813
(2): 03/12/30 19:03 ID:8NY1Jixm(1) AAS
質問させて下さい!
javaapplet でうまくキーが取れない… というか同時押しを認知してくれないんで、とても使いづらいんで、キャラクターがバリバリ動いてくれないんで、なにか妙案はないでしょうか?
814: 03/12/30 19:08 ID:89Usy+84(1) AAS
んでんでんで
815: 03/12/30 19:34 ID:riQ5Bg3Y(1) AAS
いんで、いんで、いんで
816
(1): 03/12/30 20:12 ID:0/qWWE1o(1) AAS
>>813
3年前に組んだコードで残ってた。動くか覚えてないけど、
こんな感じでやってみたら?

publicclassC_Keyboardimplements KeyListener{
publicstaticfinalintMAX_KEY= 256;
publicbooleankey[] = new boolean[MAX_KEY];

publicvoidClear(){
省17
817
(2): 03/12/31 02:12 ID:Fl7cRe53(1) AAS
ゲームなどで使われている独自文字入力欄[日本語対応]を作りたいのですが、、
どうやって実現してるのか謎です。DirectXでできるのかな?
誰か情報お持ちの方、些細なことでもけっこうですので教えて下さい。
818: 03/12/31 02:51 ID:9cxCAb2/(1) AAS
>>817
Immなんたらっていう名前のIMEを制御するAPIあった気がするけど、それが役に立つんじゃないのか?
819: 03/12/31 09:54 ID:zUm4t1iL(1) AAS
>>817
ふざけんなお前
検索すればすぐ出てくるだろう
820: 03/12/31 10:08 ID:lLGxR34f(1) AAS
ワロタ
821: 03/12/31 12:09 ID:gCPPzIqu(1) AAS
>>808
おいおい
GetKeyCheck() != true
なんじゃないのか?
822: 813 03/12/31 13:10 ID:S0g1wDUS(1) AAS
>>816
遅くなってゴメンナサイ、おかげさまでキャラクターがバリバリ動きます!
ありがとうございました。

追記、"key[VK_SPACE]" と書くとエラーみたいでした。
823: 03/12/31 18:56 ID:d+s4Rpq7(1) AAS
MIDIを使ってキーマニみたいなの作りたいんだけど、
何か参考になるページとかない?
824: 03/12/31 20:06 ID:6efuChc2(1) AAS
外部リンク[asp]:www.microsoft.com
825: 04/01/03 14:56 ID:UZ7OEUkf(1) AAS
よくタイマースレッドって言葉を聞くんですが、
これってビジーループしてタイマーを監視しつづけ、
変化があればメインスレッドに通知するスレッドのことですか?

これだとCPU使用率が100%になる気もするんですが、
それでいいもんでしょうか?
826
(1): 04/01/03 15:13 ID:YFxdCNxD(1) AAS
100%で構わない。
Nスク作者もその方法を薦めている。
827: 04/01/03 16:54 ID:zrdxHy1T(1) AAS
そいや、smfを解析するための公開ソースって無かったっけ?
828
(2): 04/01/03 20:47 ID:GciE0Bqf(1) AAS
>>826
おまえはアホか
829: 04/01/04 00:42 ID:3jP9OI5L(1) AAS
>>828
なんか困ることあるの?
830
(1): 04/01/04 01:19 ID:QijQXGlg(1/3) AAS
>>828
Nスクの作者にたてつくつもり?
やめといたほうがいいよ、その道の権威なんだからさ。
ボコボコにされちゃうのが見えてる(藁
831: 04/01/04 01:27 ID:Rr6GNz9Q(1/2) AAS
Nスクって何ですか?
832: 04/01/04 01:58 ID:HVBGttSC(1) AAS
Nステなら知ってるよ
833: 04/01/04 01:58 ID:a27RA1XL(1/5) AAS
>>830
それは怖いですねー (棒読み)
834: 04/01/04 02:28 ID:ttqUyCpj(1/2) AAS
突然申し訳ありません
レスを読んできたところ、WIN32API環境において、
標準のキースキャンの方法は、いまだ分かりません。
directxを用いた方法は多分有効だと思いますが、
WIN32APを用いて、Iもしくはそれに準じた形の標準的なキースキャンの方法はあるのでしょうか?

私はMS-DOS時代、割込禁止設定、割込ベクタトラップ、MS-DOSキーバッファ潰し、
で生き延びてきました。
省1
835
(1): 04/01/04 02:34 ID:Rr6GNz9Q(2/2) AAS
コールバック関数でWindowsメッセージが送られてくるので、
そのうちWM_KEYDOWNとかそんな感じのメッセージを処理すれば
良かったんだと思う。
所謂標準のSDKでは。
836: 04/01/04 03:24 ID:ttqUyCpj(2/2) AAS
>>835
レスありがとうございます。
でもそれでは、左矢印キーを押しながら、右矢印キーを短時間押すだけで
停止する処理系になってしまうと思います。

PORT 9 (PC98)監視に準じたWIN32APIの処理系を再現したいと考えております。
何か良いアイデアは無いでしょうか?
837
(1): 04/01/04 04:14 ID:Ct0gv1Hf(1/2) AAS
いや停止はいないでしょ。
なんでそんな処理系になってしまうかわからん。

普通にキーの状態を取得するAPIとしては
GetAsyncKeyStateとかがあるけど。
838
(1): 04/01/04 05:14 ID:vNXDyGpd(1) AAS
>>837
再びレスありがとうございます。
GetAsyncKeyStateの関数は以前から目を付けていくつかテストしておりましたが、
winmm.libとの絡みの問題と踏んでおりました。
while(1){}内のタイマ関数を少し見直してキースキャンプログラムを組みなおしてみます。

レス上の指摘どおり処理系の停止は無いとの前提で、
メインループの時間優先のコーディングと、
省2
839: 04/01/04 05:48 ID:Ct0gv1Hf(2/2) AAS
釣りなのか本気なのか区別つかん。
840: 04/01/04 09:07 ID:Ok/KhNOJ(1) AAS
Nスクの作者?
葱板でボコボコに叩かれてたじゃん
841: 04/01/04 09:08 ID:dA/sKtx4(1) AAS
Nスクは日本のスクール水着ってことだよ
842
(1): 04/01/04 11:11 ID:GJKuDEDj(1) AAS
>>838
だからメインループでろくにも変更されない変数を監視するなって言ってるんだよ
タイマー使いたかったらWM_TIMERをチェック

何?タイマーの精度が気に入らない?
OSの選択をそもそも間違っている
しかも他アプリケーションに迷惑かけるので、誰も使わんよ
843: 04/01/04 11:31 ID:7Q2vPaHr(1/2) AAS
せめてマルチメディアタイマーを使うか、
マルチメディアタイマーのコールバックだとデバッグしづらいのであれば、
マルチメディアタイマーでイベントシグナルを発生させるかすれば、
おおよそ1ms程度の精度は得られる。
844
(1): 04/01/04 21:00 ID:GmFh16RM(1/4) AAS
> しかも他アプリケーションに迷惑かけるので、誰も使わんよ

そういうの神経質に言う人たまにいるけど、CPU100%使うゲームで迷惑喰ったことないな
裏でどんなアプリ走らせながらゲームやってんの?
それか電力消費の気になる携帯機とかの話してる?
845
(1): 04/01/04 21:30 ID:a27RA1XL(2/5) AAS
>>844
> 裏でどんなアプリ走らせながらゲームやってんの?
ブラウザで Web の攻略ページ見てたり、メッセンジャーで話してたり。
846
(1): 04/01/04 21:40 ID:QijQXGlg(2/3) AAS
Nスク作者様の登場だ。
皆、もてなすように。
847
(2): 04/01/04 21:57 ID:GmFh16RM(2/4) AAS
>>845
ゲームがフォアグラウンドのままブラウザ使ったりしないよな?
インアクティブになったときにビジーループ止めればいいだけじゃん
Windows標準添付アプリのピンボールだってそうやってるぞ

メッセンジャーは使ったことないから知らん
ピンボールと併用して何か障害出るのか試してみてくれ
848: 04/01/04 22:07 ID:pvm3jmnY(1) AAS
障害があろうが無かろうが、あまり人に勧めるもんじゃないと思うが。
849: 04/01/04 22:23 ID:JwhI6BDv(1/3) AAS
>CPU100%使うゲームで迷惑喰ったことないな
俺は実際これで迷惑被ってる
CPU100%占有するアプリは迷惑この上ない。
Nスクってマジでそうなの?

>インアクティブになったときにビジーループ止めればいいだけじゃん
ちなみにNスクはこれをちゃんとやってるの?
850: 04/01/04 22:28 ID:GmFh16RM(3/4) AAS
> 障害があろうが無かろうが、あまり人に勧めるもんじゃないと思うが。

そう思うのはあんたの勝手。俺は

> しかも他アプリケーションに迷惑かけるので、誰も使わんよ

と書いてあったから、誰も使わなくなるほどの迷惑というのがどういうものか教えて欲しいだけ
851: 04/01/04 22:35 ID:a27RA1XL(3/5) AAS
>>847
> インアクティブになったときにビジーループ止めればいいだけじゃん
それもどうかと思うなぁ。ウィンドウがアクティブでないときでも動かしておきたい
処理もあるが、そっちだけイベントドリブンにすると話が面倒になる。

> インアクティブになったときにビジーループ止めればいいだけじゃん
だから、裏で起動してるブラウザとか IRC とか。IRC なんかは、ほかのユーザが
書き込んでくるのを眺めてたりするから、非アクティブ状態でも、スムーズに動いて
省1
852: 04/01/04 22:37 ID:a27RA1XL(4/5) AAS
追記。WM_TIMER は優先度低すぎてアレだが、マルチメディアタイマと
PostMessage(), あるいは Sleep() 組み合わせて使うと、それなりの結果
が得られるぞ。
853: 04/01/04 22:44 ID:GmFh16RM(4/4) AAS
> それもどうかと思うなぁ。ウィンドウがアクティブでないときでも動かしておきたい
> 処理もあるが、そっちだけイベントドリブンにすると話が面倒になる。

あー、よくわかった
ゲーム自体を環境として動かすような、アップルタウン物語みたいなやつを言ってるのか
リアルタイムアクション系ゲームのことしか考えてなかったスマソ

> PostMessage(), あるいは Sleep() 組み合わせて使うと、それなりの結果

そうそう、とりあえずビジーループの中でSleep(0)呼んで残りタイムスライス放棄しとけば充分
854: 04/01/04 22:45 ID:zDQFoC6I(1) AAS
ケイス・バイ・ケイス

まったく、死ねよ坊や達
855: 04/01/04 22:48 ID:QijQXGlg(3/3) AAS
> >インアクティブになったときにビジーループ止めればいいだけじゃん
> ちなみにNスクはこれをちゃんとやってるの?

長年にわたる研究の結果、ビジーループが最も効果的であるとの
結論に至ったため、Nスクはビジーループを採用しております。
これについての反論は受け付けません。
856: 04/01/04 22:51 ID:a27RA1XL(5/5) AAS
なんか必死に燃料を投下してるヤツがいるな……
857
(1): 04/01/04 23:11 ID:/k+tEE9y(1) AAS
常時CPU使用率が100%にならないエロゲー Part2
2chスレ:erog
858: 04/01/04 23:13 ID:iQG8O/cG(1) AAS
CPU100%使うかどうかは、ゲームによりけりだろ。
俺の基準だと、フルスクリーンのゲームは100%でOK、
ウインドウで遊ぶゲームはNG。

例えば、さっくりブラウザ上で遊ぶゲームはNG、
本腰入れて遊ぶようなシューティングゲームはOK。

ま、でも、実際のところ、CPU100%でいい場合でも、
時間があまったらOSに返すような作り方にしてるけどな。
省1
859: 04/01/04 23:18 ID:JwhI6BDv(2/3) AAS
>>857
なんか知らんが勉強になりそうなスレだw
860
(1): 04/01/04 23:19 ID:JwhI6BDv(3/3) AAS
一番イイのはユーザーがCPU占有率決められるものだね。
実際にそういうゲーム結構あるし。
861
(1): 04/01/04 23:45 ID:7Q2vPaHr(2/2) AAS
DirectShowが内部で用いている、
マルチメディアタイマーのイベントシグナルとスレッド併用が最も安定しているんだけど、
仕組みを解説している情報がWEB上に存在しないため、話題に挙げてもらえない。
862: 04/01/05 01:16 ID:21g6Gt2m(1) AAS
>>861
ソース晒してくれれば解説するよん
863: 842 04/01/05 01:22 ID:YhoVU3wu(1/4) AAS
自分の無知を棚にあげて言葉は一人前なんてどうしようもないな

エロゲーユーザーとその周りには分からんか 動けばいいもんね
恥ずかしくてレスもできんな
アホすぎて相手にもしたくない
高校生であることを祈る・・・
864: 04/01/05 01:24 ID:7aUyvM4l(1) AAS
そこまで言うなら実例晒してくれよ。
842も言葉だけ一人前じゃないよな?
865
(1): 04/01/05 01:28 ID:YhoVU3wu(2/4) AAS
上ですでに書かれてますが何か?
866: 851=852 04/01/05 01:40 ID:u234mokM(1) AAS
>>865
書いたのは 842 じゃないし、俺は CPU 使用率 100% に見えても Sleep(0)
しとけばいちおー許せるんじゃないの、という程度の意見だが。

もっとも、CPU の発熱がきつくなってきて動的に CPU クロック制御が入ったり、
ノート PC みたいな環境を前提とすると辛いのは確か。
867: 04/01/05 01:49 ID:YhoVU3wu(3/4) AAS
IRCの例を出してるから分かってるもんだと思ったよ
868
(2): 04/01/05 03:25 ID:GsmEKcEC(1) AAS
>>847
ピンボール見てみたけどこれ処理軽いなー
タスクマネージャーでCPU使用率見てるとごくまれに
2%になることあるけどほどんど0%表示だよ。

このソフトみたいに必要な分だけCPU使うでいいじゃない。
UDやSETIみたいなCPUパワーを提供するソフトを動かしてる人もいるだろうし
無理にCPU使用率を上げることも無いと思うけど。
869
(2): 847=851=853 04/01/05 05:13 ID:yNwoTOXR(1/3) AAS
オハヨー

>>868
そう? 俺、Athlon1.3G+Win2Kで試したけど完全に100%に張り付くよ
別バージョンがあるのかな。何で試した?
870: 04/01/05 07:01 ID:dYS0U3b4(1) AAS
必要な分だけCPUをつかう、それ以上は使わない、でいいじゃん
Sleep挟んだって結局はなにもしないのにCPUつかってるにはかわりねえんだろ?
871: 04/01/05 08:54 ID:nfjSkZXM(1/2) AAS
HLT発行までやるのかい。至れり尽くせりだな〜。
872: 04/01/05 10:55 ID:nQyL5b2H(1) AAS
まあ、そういうことですな
・・・OSがやるけど。
873: 04/01/05 11:24 ID:nfjSkZXM(2/2) AAS
Windows98ならあるいは意味があるかもしれん。
ソフトウェアクーラーなんてのが出るくらいだしな。
874: 04/01/05 13:56 ID:mfvkBEyV(1/2) AAS
>>860
ユーザーが決めるって、
結局windowsのタイマー系のAPIで時間を取得して
その後Sleepで空けているだけだから
Sleep精度に依存し、精度の維持なんてできるもんじゃないと思うんだが。
875
(2): 868 04/01/05 14:08 ID:oyfGmKof(1) AAS
>>869
ウチのは Pen4 2.2G + WinXP SP1

プレイ中だろうが非アクティブ時だろうが
常に0%になってる。(ということは0.5%未満?)
876
(1): 04/01/05 14:41 ID:mfvkBEyV(2/2) AAS
ウチのWin2k+SP4付属のピンボールもも0%だ。
877
(3): 869 04/01/05 15:15 ID:yNwoTOXR(2/3) AAS
>>875-876
俺だけか? 試しにメーカー製PC(LogitecのP4 2.66G+Win2KSP3 素のまま)でやってみたけどやっぱ100%。。。何が違うんだろ
1-
あと 93 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.028s