ページ 11

C++でゲームのタイトル文字を、キー入力したら数秒間点滅させる処理

Posted: 2014年2月14日(金) 16:07
by samusu0905
C++で2Dアクションゲームを作ってる途中なんですが、キー入力したらタイトル文字を数秒間点滅させてゲームプレイに移動する処理をしたいので、わかる人なら誰でも構いませんのでプログラムを教えてください><
ここにコードを載せておきます。

コード:

//********************************************************************************
// タイトル処理
//********************************************************************************
#include <stdio.h>				//C言語
#include <time.h>				//C言語
#include "gs.h"					//学内ライブラリィ
#include "def.h"				//共通定義
#include "Title.h"				//タイトル


//グローバル変数参照---------------------------
extern int gSceneMode;			//現在シーン
extern int gTimer;				//タイマー
extern int gTime;			//点滅タイムセット
extern gsTexture sTitleText1;	//タイトル文字1
extern gsTexture sTitleText2;	//タイトル文字2
extern gsTexture sTitle;		//タイトル背景
extern gsSound sTitleBGM;		//タイトルBGM
extern gsSound sButtonSE;		//決定音SE


//開始-------------------------------------------------------------------
void TitleStart(void)
{
	gsPlaySound( sTitleBGM, LOOP_ON);		//タイトル
}

//メイン処理-------------------------------------------------------------
void TitleMain(void)
{
	gTime++;

	if( gsKeyState(VK_SPACE)==GSKS_DOWN ||
		gsGetJoyPadState(0, JOYPAD_BUTTON10)==GSKS_DOWN )
	{
		if( gTime%4 >= 2)
		{
			gsDraw2D( sTitleText2, 270, 450);
		}
		gSceneMode = MODE_GAMEPLAY;
		gsPlaySound( sButtonSE, LOOP_OFF);
		gsStopSound( sTitleBGM);
	}
}


//表示-------------------------------------------------------------------
void TitleDraw(void)
{
	//タイトル背景
	gsDraw2D( sTitle, 0, 0);

	//タイトル文字1
	gsDraw2D( sTitleText1, 180, 260);
	
	if( gTime%65 >= 25)
	{
		//タイトル文字2
		gsDraw2D( sTitleText2, 270, 450);
	}
}
間違いや書くべき物が抜けているところがあれば訂正お願いします><[/b]

Re: C++でゲームのタイトル文字を、キー入力したら数秒間点滅させる処理

Posted: 2014年2月14日(金) 16:57
by softya(ソフト屋)
この掲示板では、単なる答えを回答するのではなく、プログラムの楽しさ、考え方を知ってもらうために支援する・アドバイスをすると言うスタンスで活動しております。
と言うことで、まずフォーラムルールをご覧頂ければと思います。
http://dixq.net/board/board.html

学内ライブラリィと言うことで課題だと思いますが、タイトルを一定時間おきに点滅させるということが出来ていますので、それをベースに一定時間経過したらmainに移るタイミングのif文を書いてみて頂けないでしょうか。

Re: C++でゲームのタイトル文字を、キー入力したら数秒間点滅させる処理

Posted: 2014年2月14日(金) 17:46
by samusu0905
具体的にはif文でキー入力後、文字の点滅を一定時間やって、次のモードに移行する処理をしたいだけなのですが。
プログラムで具体的にどうゆう処理をすればできるのかを知りたいです。
お願いします。

Re: C++でゲームのタイトル文字を、キー入力したら数秒間点滅させる処理

Posted: 2014年2月14日(金) 18:35
by softya(ソフト屋)
samusu0905 さんが書きました:具体的にはif文でキー入力後、文字の点滅を一定時間やって、次のモードに移行する処理をしたいだけなのですが。
プログラムで具体的にどうゆう処理をすればできるのかを知りたいです。
お願いします。
すいません。それは課題の丸投げに該当します。
ただ答えをもらうより、自分で考えることに価値があると思うわけです。
なので、できるだけご自身で書いて頂く必要があります。
その上で、問題点やアドバイスが有れば、こちらから書き込むというのが理想の展開です。

【補足】
この話の流れだと、C言語で全くプログラムが書けないので全部書いてほしいとしか読み取れません。

Re: C++でゲームのタイトル文字を、キー入力したら数秒間点滅させる処理

Posted: 2014年2月14日(金) 18:47
by sql
タイトル(点滅はこの時点では無し)→キー入力→文字点滅開始→何回か点滅(任意の回数)→次のシーン(ここだとPLay?)へ・・・という感じでしょうか?
おそらく今の状態では、初期段階から点滅が開始していて、キーを押した瞬間に次のシーンへ移動してしまう・・・のではないかと思います。
「初めは点滅しない」のであればいきなりTitleMainのなかで何の条件もなしに「カウント++」と書くのはいけない!というのはわかるかと思います。

では、「キーが押されたら」の条件式の中に書くとどうなるか?学内ライブラリということなのでどういう処理をしてくれるかはわからないですが、この中に書くと「キーが押されている時だけカウント加算」になってしまうかと思います。それだと押しっぱなしにしないと(または連打)カウントが加算されず困ることになると思います・・・

自分が初めに思いつくのが、bool型のフラグを1つ用意します。名前は「start_count_flag」とかテキトーに。(初期値はfalseで)
すると、TitleMainの中に書くのは「キーが押されたらフラグをtrueに!」、「フラグがtrueの時はカウントを加算」、「カウントが100以上(100というのは例です)になったらシーンをPlayに!」という処理だと思います。そしてDrawには点滅の計算式(もう書いてありますね!)を書けばいいと思います。
これをコードにできるか・・・ですね。(これはあくまで一例です)

Re: C++でゲームのタイトル文字を、キー入力したら数秒間点滅させる処理

Posted: 2014年2月15日(土) 09:41
by samusu0905
sqlさん、分かりやすい説明有難うございます。
sqlさんの説明を参考にしながらもう少し自分で考えてプログラム組み込んでみます。
あと少しで出来るとおもうので。頑張ります!

Re: C++でゲームのタイトル文字を、キー入力したら数秒間点滅させる処理

Posted: 2014年2月17日(月) 15:18
by samusu0905
参考にしながらプログラム打ったらできました!
有難うございます。