選択肢について
Posted: 2007年11月02日(金) 04:01
初めまして.
私は現在大学生で,卒業制作にDXライブラリでゲーム製作しようと意気込んでいるのですが,
早速壁にぶち当たりましたので,質問させていただきました.
まず,環境その他を説明させていただきます.
OSはWindowXP,開発環境はVisualStudio2005です.
開発言語はC++で,私を含めまして,総勢3名での開発を目指してします.
参考資料としまして,DXライブラリを開発された方が著された,
「14歳からはじめるC++ わくわくゲームプログラミング」を用いております.
また,貴サイト「C言語~ゲームプログラミングの館~」は,
DXライブラリの基礎の部分で非常にお世話になっております.
ありがとうございます.
現在,タイトルの通り,選択肢を実装するところで躓いております.
と言いますのも,貴サイトにて解説されていました,
「33. 選択画面の作り方。」を参考に,選択画面の処理を実装してみました.
具体的には,例えば「START」と「EXIT」のような選択肢があるとしますと,
それぞれ画像を2枚準備し,選択状態にあるかないかで画像を切り替えるというものです.
なお,この処理はクラスのメンバ関数内で定義しており,
オブジェクトが持つゲームの状態(TITLE画面なのかMAIN画面なのか)をwhileループ内のswitch文で判定し,
当該メンバ関数を呼び出しています.
(参考資料の第4章,GameFrameクラスに相当)
まず,解説されている内容を参考にして,選択が上にも動くように実装しました.
躓いているのは,選択が動くスピードが異常といいますか,とにかく早いのです.
解説されているソースを丸々コピーしてコンパイルすると,
選択状態を表す「■」は正常な速度で動きます.(当たり前ですが…)
そこで,選択処理の部分をコピーし,メンバ関数にはりつけたのですが,
やはり処理が異常に早く,一回↓キーを押しただけで,ルーレット状態となってしまいます.
次に,whileループ内に,メンバ関数を呼び出すのではなく,当初の選択処理を直接記述すると,
選択は正常に動作しました.
念のため試してみたのですが,「■」を動作させる処理をメンバ関数内で処理すると,
やはりルーレット状態になってしまいました.
以上の点から,メンバ関数に記述していること自体が問題だと思うのですが,
一応,処理の流れ上,ループする毎にScreenFlip();関数が呼び出されているはずなので,
何故このような状態に陥るのか分からず,解決できないでおります.
なお,STARTが選択されている状態で「z」キーを押すと,
ちゃんとメイン画面に切り替わるので,ループ処理にも問題はないと思います.
ソースの一部を,別にレスして載せますので,どなたかご助言いただけませんでしょうか.
よろしくお願いいたします.
私は現在大学生で,卒業制作にDXライブラリでゲーム製作しようと意気込んでいるのですが,
早速壁にぶち当たりましたので,質問させていただきました.
まず,環境その他を説明させていただきます.
OSはWindowXP,開発環境はVisualStudio2005です.
開発言語はC++で,私を含めまして,総勢3名での開発を目指してします.
参考資料としまして,DXライブラリを開発された方が著された,
「14歳からはじめるC++ わくわくゲームプログラミング」を用いております.
また,貴サイト「C言語~ゲームプログラミングの館~」は,
DXライブラリの基礎の部分で非常にお世話になっております.
ありがとうございます.
現在,タイトルの通り,選択肢を実装するところで躓いております.
と言いますのも,貴サイトにて解説されていました,
「33. 選択画面の作り方。」を参考に,選択画面の処理を実装してみました.
具体的には,例えば「START」と「EXIT」のような選択肢があるとしますと,
それぞれ画像を2枚準備し,選択状態にあるかないかで画像を切り替えるというものです.
なお,この処理はクラスのメンバ関数内で定義しており,
オブジェクトが持つゲームの状態(TITLE画面なのかMAIN画面なのか)をwhileループ内のswitch文で判定し,
当該メンバ関数を呼び出しています.
(参考資料の第4章,GameFrameクラスに相当)
まず,解説されている内容を参考にして,選択が上にも動くように実装しました.
躓いているのは,選択が動くスピードが異常といいますか,とにかく早いのです.
解説されているソースを丸々コピーしてコンパイルすると,
選択状態を表す「■」は正常な速度で動きます.(当たり前ですが…)
そこで,選択処理の部分をコピーし,メンバ関数にはりつけたのですが,
やはり処理が異常に早く,一回↓キーを押しただけで,ルーレット状態となってしまいます.
次に,whileループ内に,メンバ関数を呼び出すのではなく,当初の選択処理を直接記述すると,
選択は正常に動作しました.
念のため試してみたのですが,「■」を動作させる処理をメンバ関数内で処理すると,
やはりルーレット状態になってしまいました.
以上の点から,メンバ関数に記述していること自体が問題だと思うのですが,
一応,処理の流れ上,ループする毎にScreenFlip();関数が呼び出されているはずなので,
何故このような状態に陥るのか分からず,解決できないでおります.
なお,STARTが選択されている状態で「z」キーを押すと,
ちゃんとメイン画面に切り替わるので,ループ処理にも問題はないと思います.
ソースの一部を,別にレスして載せますので,どなたかご助言いただけませんでしょうか.
よろしくお願いいたします.