ページ 11

2回押したらダッシュの仕方

Posted: 2011年11月04日(金) 00:20
by 神佳7
アクションゲームで素早く2回押したらダッシュの仕方がわかりません教えてください。



//インクルード
#include <stdio.h>
#include "gs.h"
#include "Player.h"

//定数の定義
#define WIDTHMAX 640 //画面の縦
#define HEIGTMAX 480 //画面の横
#define Player_XSIZE 125 //プレイヤーサイズ縦
#define Player_YSIZE 125 //プレイヤーサイズ横

//オン、オフ
enum
{
OFF=0, //オフ
ON=1 //オン
};

//左右方向
enum
{
RIGHT=0, //右
LEFT=1 //左
};

//オブジェクト
typedef struct
{
int flg; //存在フラグ
int X; //x座標
int Y; //y座標
float speed; //加速度
int dir; //向き
int jump; //ジャンプしているか?
int cnt; //アニメーション カウント
}OBJ;

//グローバル変数
OBJ gPlayer; //プレイヤー
int gHitkey; //連続押しを防ぐフラグ

//絵の変数
gsTexture sPlayer; //プレイヤー
gsTexture sBG; //背景

//ゲーム前処理
//プログラム開始時に1回のみシステムから呼ばれる
void GameInit(void)
{
//絵の読み込み
gsLoadTexture( &sPlayer, "BMP/Player.bmp", 0xff000000); //プレイヤー
gsLoadTexture( &sBG, "BMP/BG.bmp", 0 );//背景

//キーの初期化
gHitkey = ON;
}

//ゲームループ処理
//毎ループごとにシステムから呼ばれる
void GameLoop(void)
{
GameMain();


//キーを離したかのチェック(エンター、Z、xの3つが対象)
if( !gsKeyCheck(VK_RETURN) &&
!gsKeyCheck ('Z'))
{
gHitkey = OFF; //キーを押したことを記憶する
}


GameDraw();
}


//ゲーム後処理
//プログラム終了時に1回のみシステムから呼ばれる
void GameTerm(void)
{
//絵の解放
gsReleaseTexture( sPlayer ); //プレイヤー
gsReleaseTexture( sBG ); //背景
}

//1プレイ初期化
void PlayInit(void)
{
//プレイヤーの初期設定
gPlayer.X = 0;
gPlayer.Y = 0;
gPlayer.dir = RIGHT;
gPlayer.jump = OFF;
}

void GameMain()
{
PlayerMove(); //プレイヤー移動
}

void GameDraw(void)
{
int y;
//背景表示
gsDraw2D( sBG,0,0 );

//プレイヤーを表示

gsDraw2D( sPlayer,gPlayer.X,gPlayer.Y );

//向きによりyを決定
if(gPlayer.dir == RIGHT) y=0;
else y=1;
}

//プレイヤー移動
void PlayerMove(void)
{
int dashrightflag = 0;
int dashrighttime = 0;

if (gsKeyState(VK_RIGHT) == GSKS_DOWN )
{
if(dashrighttime >= 0)
{
dashrightflag=1;
dashrighttime--;
}
dashrighttime=30;//0.5sec
}
//右へ移動
if ( gsKeyCheck(VK_RIGHT))
{
if(dashrightflag==1)
{
gPlayer.X+=8;
}else{
gPlayer.X+=4;
}
dashrighttime--;
}
//左へ移動
if( gsKeyCheck(VK_LEFT))
{
gPlayer.X -= 4; //移動
}

//右はみ出し処理
if ( gPlayer.X > 540 )
{
gPlayer.X = 540;
}
// 左はみ出し処理
if ( gPlayer.X < -40 )
{
gPlayer.X = -40;
}

//ジャンプ処理
//ジャンプ中
if(gPlayer.jump == ON)
{
gPlayer.Y += gPlayer.speed;
gPlayer.speed += 0.5;

}
//ジャンプ開始
else
{
//前回、キーが押されていなければ
if ( gHitkey == OFF )
{
//Zキーを押したら
if( gsKeyCheck('Z'))
{
gHitkey = ON; //キーを押したことを記憶する
gPlayer.jump = ON; //ジャンプ中にする
gPlayer.speed = -10; //加速度を設定
}
}
}
//ジャンプ終了
if ( gPlayer.Y > 0 ) //基本位置より下に落ちたら
{
gPlayer.Y =0; //基本位置に戻す
gPlayer.jump = OFF; //ジャンプ終了する
}
}

Re: 2回押したらダッシュの仕方

Posted: 2011年11月04日(金) 00:37
by jay
プログラムコードを書く時は

コード:

で囲んでくださいね
と、一応この掲示板のルールらしいので


で、2回押したらダッシュというのは星のカービィみたいに左または右を素早く押したらダッシュということでいいのでしょうか。
考え方としては

1、状態を見張るチェック変数を用意する(何もしない待機時は0にしておく)

2、右または左を1回押したらチェック変数を1にする

3、ボタンを1度離したらチェック変数を2にする、何も押さなくてもこの状態を1秒程(?)キープする

4、チェック変数が2の時にもう1度右または左を押したらダッシュ状態にする
  また、どうじにチェック変数を3にしておく(誤作動防止のため)

5、ダッシュをやめたらチェック変数を0に戻す


と、10秒くらいで考えた仕様を簡単に書いてみました
この場合普通の歩きとチェック変数は何も関係ないことに注意してくださいね

もし見当違いのこと書いてたらすいません・・・

Re: 2回押したらダッシュの仕方

Posted: 2011年11月04日(金) 08:56
by softya(ソフト屋)
マルチポストになっていますので相互リンクをお願いします。詳しくはフォーラムルールを御覧ください。
http://dixq.net/board/board.html

「C言語で右を2回押したらダッシュと言うことをやりたいのですがこれではだめなので... - Yahoo!知恵袋」
http://detail.chiebukuro.yahoo.co.jp/qa ... 1174713256