c++でゲームキャラクターのモーションの中の一部表示

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
samusu0905
記事: 336
登録日時: 5年前

c++でゲームキャラクターのモーションの中の一部表示

#1

投稿記事 by samusu0905 » 5年前

c++の場合、ゲームキャラクターのアニメーションの中から一部だけを切り取って表示させて、さらにそのキャラクター
をモーションどおりに動かしたいのですが。やったことがないのでプログラムを教えていただけないでしょうか?
できればここにプログラムを書いていただけると幸いです。 通常の表示はできても、モーションの中の一部表示の方法がわからないです・・。

お願いします。

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

Re: c++でゲームキャラクターのモーションの中の一部表示

#2

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

使用しているOSやライブラリはなんですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: c++でゲームキャラクターのモーションの中の一部表示

#3

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

前のトピックを放置しないで頂けませんでしょうか。解決コードを投稿し、解決チェックして頂きたいです。
「C++でゲームのタイトル文字を、キー入力したら数秒間点滅させる処理 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=14643

なお、コードを書いてほしい的な丸投げ質問は原則禁止させて頂いております。
詳しくはフォーラムルールを御覧ください。
http://dixq.net/board/board.html

考え方や勉強法のアドバイスなどでサポートしますのでよろしくお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

samusu0905
記事: 336
登録日時: 5年前

Re: c++でゲームキャラクターのモーションの中の一部表示

#4

投稿記事 by samusu0905 » 5年前

使用中のものは学校のGS学内ライブラィというものです。DXは使用してません。

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

Re: c++でゲームキャラクターのモーションの中の一部表示

#5

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

次のことをお守りくださいますようにお願いします。
詳しくはフォーラムルールを御覧ください。
http://dixq.net/board/board.html

フォーラムルールより引用
4. 義務行為
[C言語何でも質問掲示板でのみ適用される事項]
・トピックを立て、解決した場合は「解決しました」とだけ書かず、どうやって解決したか他の人に分かるように書いて  からトピックを終了して下さい。
・複数の回答者がいた場合、都合の良い、または自分の気が向いた回答者にだけ返信を書かず、回答をくれた人 全員に対して出来る限りの返信を書きましょう。
・回答者のコメントの中に複数質問があった場合、出来る限りその全てに答えるようにしましょう。
「C++でゲームのタイトル文字を、キー入力したら数秒間点滅させる処理 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3 ... 51#p116351
出来るだけ詳しく、同じ学校に人に参考になる程度に詳しくお願いします。
ソースコードを掲載してもらったほうが早いです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

samusu0905
記事: 336
登録日時: 5年前

Re: c++でゲームキャラクターのモーションの中の一部表示

#6

投稿記事 by samusu0905 » 5年前

コード:

//*********************************************************************
// ドラゴン処理
//*********************************************************************
#include <stdio.h>
#include "gs.h"
#include "def.h"
#include "Dragon.h"
#include "Fire.h"


//グローバル変数宣言-------------------------------------
OBJ gDragon;			//ドラゴンの構造体


//グローバル変数参照-------------------------------------
extern gsTexture sDragon;			//ドラゴン
extern gsSound sFireBreathSE;		//炎放射


//開始--------------------------------------------------------------------
void DragonStart(void)
{
	gDragon.x = 450;		//X座標
	gDragon.y = 580;		//Y座標
	gDragon.HP = 6;			//ドラゴンHP
	gDragon.timer = 0;		//タイマー
}


//メイン処理-----------------------------------------------------------------
void DragonMain(void)
{
	DragonMove();				//移動
	DragonInScreen();			//移動範囲
	Dragonbreath();				//火炎を放射
}


//表示-------------------------------------------------------------------------
void DragonDraw(void)
{
	//char rect;

	gsDraw2D( sDragon, gDragon.x, gDragon.y);
}


//ドラゴンが火を放射-----------------------------------------------------------
void Dragonbreath(void)
{
	//Z、ボタン1が押されたら放射
	if( gsKeyState('Z')==GSKS_PRESS ||
		gsGetJoyPadState(0, JOYPAD_BUTTON1)==GSKS_PRESS)
	{
		//炎放射
		FireSet( gDragon.x+18, gDragon.y-45);
		gsPlaySound( sFireBreathSE, LOOP_OFF);
	}
}


//移動処理---------------------------------------------------------------------
void DragonMove(void)
{
	if(gsKeyState(VK_RIGHT)==GSKS_PRESS ||
		gsGetJoyPadState(0, JOYPAD_RIGHT)==GSKS_PRESS)
	{
		gDragon.x += 4;
	}

	if(gsKeyState(VK_LEFT)==GSKS_PRESS ||
		gsGetJoyPadState(0, JOYPAD_LEFT)==GSKS_PRESS )
	{
		gDragon.x -= 4;
	}

	if( gsKeyState(VK_UP)==GSKS_PRESS ||
		gsGetJoyPadState(0, JOYPAD_UP)==GSKS_PRESS )
	{
		gDragon.y -=4;
	}

	if( gsKeyState(VK_DOWN)==GSKS_PRESS ||
		gsGetJoyPadState(0, JOYPAD_DOWN)==GSKS_PRESS )
	{
		gDragon.y += 4;
	}

}


//移動範囲の制限----------------------------------------------------------------
void DragonInScreen(void)
{
	//右方向
	if( gDragon.x > 930)
	{
		gDragon.x = 930;
	}

	//左方向
	if( gDragon.x < DRAGON_XSIZE - 97)
	{
		gDragon.x = 0;
	}

	//下方向
	if( gDragon.y > GS_WINDOW_HEIGHT - DRAGON_YSIZE)
	{
		gDragon.y = GS_WINDOW_HEIGHT - DRAGON_YSIZE;
	}

	//上方向
	if( gDragon.y < DRAGON_YSIZE - 70 )
	{
		gDragon.y = 0;
	}
}


//ダメージ処理---------------------------------------------------------------------------------
void DragonDamage(void)
{
	if( gDragon.timer > 0)
	{
		//タイマー加算して、50超えると0でダメージ終了
		gDragon.timer++;
		if( gDragon.timer > 50)
		{
			gDragon.timer = 0;
		}
	}
}
こんな感じのプログラムです。要するに、モーションが2パターンあり、その中の一部を表示した後に、
他のモーションを動作させるプログラムのことです。因みに画像はドラゴンが羽ばたいているモーションと通常の飛んでいる
モーションの2パターンに分かれています。僕が分からない点はどうやってプログラムでモーションをさせるかです。

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

Re: c++でゲームキャラクターのモーションの中の一部表示

#7

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

ソースコードは、もうひとつのトピックの話だったのですが。あちらの方もお願いします。
「C++でゲームのタイトル文字を、キー入力したら数秒間点滅させる処理 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3 ... 51#p116351
出来るだけ詳しく、同じ学校に人に参考になる程度に詳しくお願いします。
ソースコードを掲載してもらったほうが早いです。
こちらもソースコードがあれば話が早いです。ソースコードをみてまた回答します。
【補足】あちらの方の完了を待って返答する予定です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
usao
記事: 1565
登録日時: 6年前

Re: c++でゲームキャラクターのモーションの中の一部表示

#8

投稿記事 by usao » 5年前

「アニメーション」と「モーション」という単語が使い分けられていますが,
異なるものを指しているのでしょうか? それとも
>モーションが2パターンあり…
というのは,「表示したいアニメーションが2種類ある」ということですか?

>その中の一部
とは何のことですか? 「一部」とは,例えば
・あるアニメーション(モーション?)が{A,B,C,D,E}という5枚の画像からなるとき,{B,C,D}の部分
という意味でしょうか? それとも
・表示したい画像のサイズが200x100[pixel]であるときの,{top,left,width,height}={10,10,80,50}のような部分領域
という意味? あるいはその他?

あなたの質問文を読む人はあなたの置かれている状況を全く知らないのだ ということを念頭において
質問内容がわかるように 具体的に/詳細に 困っていることを書かれるとよいのではないでしょうか.
(でないと,読み手に別の意味に解釈されて無駄な問答を繰り返すことになりかねません)


>こんな感じのプログラムです。要するに、……

そのコードのどこを見れば,「要するに」以降の内容を読み取ることができるのでしょう?
「ここだ」という箇所があるのであれば,そのように説明した方が相手に伝わり易いのではありませんか?
あるいは,アニメーション(モーション?)に関連する箇所のコードを抜粋して示す等されるべきかと思います.
オフトピック
なんか最近,こういう 日本語が不自由な感じの 質問文を良く見かけますね.
(わざわざ「日本語ネイティブですか?」みたいことを聞いてるようなトピックすらあるし…)
今回ので言えば,最初の文から既に日本語がおかしいと思うわけですが,わざとやってるんでしょうかね?
内容が他者に伝わらなければ欲しい回答が得られなくなるわけで
質問者側にとっても利が無い謎の行為にしか見えないのですけど.
もちろん「本当に日本語ネイティブじゃない」のであれば,どうこう言いませんけども.

ISLe
記事: 2645
登録日時: 9年前
連絡を取る:

Re: c++でゲームキャラクターのモーションの中の一部表示

#9

投稿記事 by ISLe » 5年前

提示されたソースコードにはアニメーション(あるいはモーション)を行っている箇所は見当たりませんね。

質問を超解釈すると…
・アニメーションに必要な絵が一枚の画像の中に収められている
・画像から一部を抜き出して描画することを順番に繰り返すことでアニメーションさせたい
ということかと思います。
DragonDraw関数の中に書いてそれを実現するコードを教えろってことですかね。

ちなみにわたしはGS学内ライブラリというものを知らないので、GS学内ライブラリで画像の一部を描画する方法も分かりません。

ISLe
記事: 2645
登録日時: 9年前
連絡を取る:

Re: c++でゲームキャラクターのモーションの中の一部表示

#10

投稿記事 by ISLe » 5年前

ヘッダファイル名とかライブラリ関数名で適当に検索してみたところ、なぜか中国語のサイトで見付けました。

gsDraw2DPart(gsTexture tex, int dx, int dy, int sx, int sy, int w, int h)
tex … テクスチャ
dx,dy … 描画先の左上座標
sx,sy … テクスチャの左上座標
w,h … 描画サイズ

そこの学生ならライブラリのリファレンスマニュアルをあたればgsDraw2Dの並びですぐに見付かりそうなものですけど。

samusu0905
記事: 336
登録日時: 5年前

Re: c++でゲームキャラクターのモーションの中の一部表示

#11

投稿記事 by samusu0905 » 5年前

分かりずらい説明で申し訳ございません。反省します。
アニメーションではなく、アクションの間違えでした。
画像に2つのアクションをするパターンのモーションがありまして、その2つのアクションパターンの一部を切出してそのキャラクターにアクションのモーションをさせるということです。
さっき自分が使っているライブラリィを色々と調べたところ、一部切り出し処理とかありませんでした・・。
混乱させてしまい申し訳ございませんでした。
自分の使っているライブラリィでは一部切出してキャラクターにアクションモーションをさせるとこは不可能だとわかりました。
そこでなんですが、3Dや2Dのキャラクター画像に、何らかの動いているモーションをさせるようなライブラリィってありましたか? あれば教えていただきたいのですが。

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

Re: c++でゲームキャラクターのモーションの中の一部表示

#12

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

申し訳ありませんが、フォーラムルールを守っていただくことを重ねてお願いします。
守っていただく事が両者(質問者・回答者)にとって互いにメリットの有る事です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2645
登録日時: 9年前
連絡を取る:

Re: c++でゲームキャラクターのモーションの中の一部表示

#13

投稿記事 by ISLe » 5年前

質問者さんの使っているライブラリにはgsDraw2DPart関数が無い、ということですかね。
それ以外の識別子は完全に一致したのですがわたしが見付けたのは似て非なるものだったのでしょうか。

あるいはライブラリに[質問者さんが望む形を完璧に満たす]アニメーション機能が無いことで実現不可能だとおっしゃっているのでしょうかね。

そちらの学校では、実際の開発現場でプログラミングより大事なこと(があるということ)を教えていないのでしょうか。

samusu0905
記事: 336
登録日時: 5年前

Re: c++でゲームキャラクターのモーションの中の一部表示

#14

投稿記事 by samusu0905 » 5年前

すっかり忘れていました。ここでは解決にしておきます。

閉鎖

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