キャラの往復

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

キャラの往復

#1

投稿記事 by けんしn » 9年前

DXlibを使用して、ゲームを作るのに、キャラクターをウインドウの壁の間を往復させたいのですがどうすればいいですか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: キャラの往復

#2

投稿記事 by みけCAT » 9年前

適切なコードを書き、コンパイル(アセンブルとリンクを含む)し、実行すればいいです。
キャラクターの絵を描き、適切なパスにファイルとして保存することも必要かもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: キャラの往復

#3

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

座標と移動ベクトル変数で情報を保持。壁に接近したら、壁から離れる方向に移動ベクトルのXかYを反転します。
これで往復するはずです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: キャラの往復

#4

投稿記事 by Dixq (管理人) » 9年前

softyaさんが仰る通りのサンプルプログラムを書いてみました。

コード:

#define _USE_MATH_DEFINES
#include "DxLib.h"
#include <math.h>
#define W 640
#define H 480

class Player {
	double x, y, v, ang;
public:
	Player() { x = 320, y = 240, v = 5, ang = 0; }
	void update() {
		if (!(0<=x && x<W)) {
			ang += M_PI;
		}
		x += cos(ang)*v;
		y += sin(ang)*v;
	}
	void draw() {
		DrawCircle((int)x, (int)y, 10, GetColor(255, 255, 255), TRUE);
	}
};

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);

	Player p;

	while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
		p.update();
		p.draw();
	}

	DxLib_End();
	return 0;
}
実行結果
[youtube][/youtube]

どうでしょうか?
vは速さ、angは角度です。
sin,cosの使い方はこの辺で紹介しています。
http://dixq.net/g/h_06.html

閉鎖

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