自機の移動について

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

自機の移動について

#1

投稿記事 by 夜光 » 15年前

お初で失礼いたします。

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

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

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

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

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 自機の移動について

#2

投稿記事 by softya(ソフト屋) » 15年前

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

龍神録の元のコードでコンパイルしたときにDrawRotaGraphFでエラーが出るかも確認してみてください。
VisualStudioのバージョンなどで違いがあるのかも知れません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

夜光

Re: 自機の移動について

#3

投稿記事 by 夜光 » 15年前

いろいろやってみましたが、低速移動機能とかいらないかなぁと思ったので、

コード:


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型のほうが精度が良くて速度が速いそうですが、プレイヤーくらいならまったく問題ないかと勝手に思っています。
角度を求めるときとかに使うのでしょうね、多分。

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

閉鎖

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