キーの反応について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
situmon

キーの反応について

#1

投稿記事 by situmon » 15年前

東方はタイトル画面でZキーを押しっぱなしでもどんどん前に行きません。
というのはZキーが押されたら次の画面へ・・・という判定を作ると
押しっぱなしでも反応してしまうので、タイトル画面→難易度選択画面→1ステージといきたいのが、
タイトル画面で決定キーを押しっぱなしにすると難易度選択画面が飛ばされてしまうのです。(というよりは難易度選択画面でも押しっぱなしの決定キーが反応し即座に次の画面へいってしまいます。
どうすればいいのでしょうか?
説明が下手なのでわからなければいってください。
お願いします。

今までの方法では画面に移るごとにカウントをして、カウントが60になるまで操作はできないようにするという方法をとっていましたが、不便ですごく微妙でした。

y

Re:キーの反応について

#2

投稿記事 by y » 15年前

今のフレームで取得した入力の状態と、
前のフレームで取得した入力の状態をどこかに保存しておくと可能ですよ。

例えばよく使うのは、
「今が押されていて、なおかつ前は押されていない」場合は、たった今押された、
「今が押されていなくて、なおかつ前は押されていた」場合は、たった今離された、
「今も前も押されている」場合は、押され続けている、
など。

ただこの方法は、押され続けていることは判定出来ますが、
押され続けている長さをカウントすることは出来ません。
どうしても必要があるのならば、別にカウンタを用意するか、
龍神録プログラミングの「キーコンフィグに対応させてみよう」を参考にされると良いですよ。

DVDM

Re:キーの反応について

#3

投稿記事 by DVDM » 15年前

>>situmonさん
DxLibでサンプルを作成してみました。
Zキーを押すたびに文字が切り替わるようになっています。
押しっぱなしには反応していませんのでご確認くださいませ。

#include "DxLib.h"

char NowKey[256];        [color=lime>// 今現在のキー情報[/color]
char OldKey[256];        [color=lime>// 1フレーム前のキー情報[/color]
bool CheckFlag = FALSE;    [color=lime>// キーが押されたかどうかのチェック用[/color]


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{

    ChangeWindowMode(TRUE);//ウィンドウモード

    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK ) != 0)
        return -1;

 
    while(ProcessMessage()==0 && ClearDrawScreen()==0 && NowKey[KEY_INPUT_ESCAPE]==0)
    {
        memcpy(OldKey, NowKey, sizeof(NowKey));        [color=lime>// 今のキー情報を1フレーム前のキー情報にコピー[/color]
        memset(NowKey, 0, sizeof(NowKey));            [color=lime>// 今のキー情報をクリア[/color]
        GetHitKeyStateAll(NowKey);                [color=lime>// キー情報の更新[/color]


        [color=lime>// 「今のキー情報」Zが押されていて、「1フレーム前のキー情報」Zが押されていない[/color]
        if((NowKey[KEY_INPUT_Z] == 1) &&  !(OldKey[KEY_INPUT_Z] == 1))
        {
            CheckFlag ^= 1;            
        }

        if(CheckFlag)
            DrawString(10, 50, "サンプル文字列A", GetColor(255, 255, 255));
        else
            DrawString(10, 50, "サンプル文字列B", GetColor(255, 255, 255));


        ScreenFlip();

    }


    DxLib_End();

    return 0;

}

使い方合ってるんですかね・・・。
リファレンスを見ながらやってみたので、もし期待の動作でなかったら御免なさい;

situmon

Re:キーの反応について

#4

投稿記事 by situmon » 15年前

お答えいただきありがとうございます。確認はしてませんので一度確認してみます。(すいません)
しかしみていて、その手があったか!と思いました。
oldkeyとnewkeyに分ける方法を龍神録のプログラムに当てはめて考えて見ます。
yさんDVDMさんありがとうございました。
もしまたわからないときは手助けお願いします。

これは関係ない話なのですが、DVDMさんは曲も作られるのですか?
それとサイトで(DVDMさんの)絵を見たのですが、とてもうまいですね!!
線画もphotoshopでしょうか?

DVDM

Re:キーの反応について

#5

投稿記事 by DVDM » 15年前

>>situmonさん
[color=gray>>これは関係ない話なのですが、DVDMさんは曲も作られるのですか?[/color]
何年か前にちょこっと作ったことがあるくらいで今はもう曲作りはできないですね;


[color=gray>>それとサイトで(DVDMさんの)絵を見たのですが、とてもうまいですね!!
>線画もphotoshopでしょうか?[/color]
お褒め頂きましてありがとうございます^^
そうですね・・・基本的に絵はPhotoShop上で全て作成していますので線画もPhotoShopです~

situmon

Re:キーの反応について

#6

投稿記事 by situmon » 15年前

もしよければ新しい絵を見せてください。
まえにファイル形式で霊夢などの絵を見せてもらいましたが・・・

DVDM

Re:キーの反応について

#7

投稿記事 by DVDM » 15年前

>>situmonさん
[color=gray>>まえにファイル形式で霊夢などの絵を見せてもらいましたが・・・[/color]
ん~、霊夢の絵ってあげてましたっけ・・・記憶にないです;
龍神録のキャラ二名をアップした記憶はあるんですけどね;


[color=gray>>もしよければ新しい絵を見せてください。[/color]
う・・・新しい・・・絵ですか・・・。
そうですね・・・学校の課題で描いたラフと、現在作ってるSTGで使う予定の絵を入れてみました。

こちらも全てPhotoShop上で作成したものでございます。
クリックでDL出来ない場合は下記のURLをコピーしてアドレスバーに貼ってみて下さい><
こ、こんなんで宜しいですか?
http://www.geocities.jp/dvdmvoid/SampleImage.zip

Dixq (管理人)

Re:キーの反応について

#8

投稿記事 by Dixq (管理人) » 15年前

> situmonさん

龍神録のプログラムをご覧になっているのなら
龍神録の館の8章
http://dixq.net/rp/8.html
はご覧になっていないでしょうか?
ここに入力関連の関数の作り方が書いてあります。
その基礎についてはゲームプログラミングの館の
40a章
http://dixq.net/g/41.html
に書いてありますのでご覧下さい。

situmon

Re:キーの反応について

#9

投稿記事 by situmon » 15年前

Dixqさん
ありがとうございます。そのとおりやった上でです。(しかし龍神録のプロジェクトを丸ごと使っているわけではないのでわかりませんが・・・)
いちおうゲームパッドには対応です。(対応できるコードまでは書いてます。)
DVDMさん
ありがとうございます。
うまいですね。
シューティングはできましたか?

DVDM

Re:キーの反応について

#10

投稿記事 by DVDM » 15年前

>>situmonさん
[color=gray>>シューティングはできましたか?[/color]
ゲーム作るためのクラス作り(前準備)の段階ですね。
ある程度ゲームのシステムについては終わったので、クラスの見直しと絵を補おうとしているところですね。
なので、ゲームとしてはまだ遊べない段階です;

situmon

Re:キーの反応について

#11

投稿記事 by situmon » 15年前

そうですか。こちらもがんばらなければ・・・
回答してくれた皆様どうもありがとうございました。
もしまた何かわからないことがありましたら是非お願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る