ページ 11

自機の移動について

Posted: 2011年2月19日(土) 06:35
by 夜光
お初で失礼いたします。

龍神録プログラミングの館を参考に、STGを作っているのですが、
第9章の「キャラクタの移動制御」をそのままコピペして実行してみました。

すると、確かに動くはうごくのですが動き方がおかしく、スピードに偏りがあるのです。

いろいろやってみてわかったのですが、左と上に移動するときになぜか速度が遅くなり、
逆に右と下に移動すると早くなるんです。

いろいろと試してみましたが、初心者なのでいまいちどこがおかしいのか分からずに・・・。

本当にまるまるコピーで使っているのでコードは書かないでおきます。

*あとちょっとした疑問。
自機の構造体に、自機のXY座標宣言がありましたがそれはdouble型でした。
そしてDrawRotaGraphFで、わざわざfloat型で呼び出ししてます。
いちいち警告で型の変換が出てびっくりします・・・。

Re: 自機の移動について

Posted: 2011年2月19日(土) 13:24
by softya(ソフト屋)
まるまるコピーと言っても、他の部分が違えば動作に違うところが出てくることは良くあります。
もとの龍神録のコードで同じ問題が出るか確認してみてください。
※ 龍神録のサイトでソースコードがダウンロードできます。
よく分からないならソースコードを貼ってもらうのが一番良いと思います。
[追記]
元のコードでも問題が出るならDXライブラリを最新にしてもらうと直るかも知れません。

龍神録の元のコードでコンパイルしたときにDrawRotaGraphFでエラーが出るかも確認してみてください。
VisualStudioのバージョンなどで違いがあるのかも知れません。

Re: 自機の移動について

Posted: 2011年2月22日(火) 05:21
by 夜光
いろいろやってみましたが、低速移動機能とかいらないかなぁと思ったので、

コード:


if(CheckStatePad(configpad.left) >0) player.x -= X;
		if(player.x <FIELD_MIN_X) player.x	= FIELD_MIN_X;
	
	if(CheckStatePad(configpad.right) >0)player.x += X;
		if(player.x >FIELD_MAX_X) player.x  = FIELD_MAX_X;
 	
	if(CheckStatePad(configpad.up) >0)   player.y -= Y;
		if(player.y <FIELD_MIN_Y) player.y  = FIELD_MIN_Y;
	
	if(CheckStatePad(configpad.down) >0) player.y += Y;
		if(player.y >FIELD_MAX_Y) player.y  = FIELD_MAX_Y;

このように凄く単純なものにしました。
もう動けばそれでいいかと思います。

DrawRotaGraphFのエラーは、この俗に言う加速度の変数、XとYをfloat型にすることで解決しました。
double型のほうが精度が良くて速度が速いそうですが、プレイヤーくらいならまったく問題ないかと勝手に思っています。
角度を求めるときとかに使うのでしょうね、多分。

というわけで解決にしておきます。