キャラクターにアニメーションさせるスピードを遅くしたいのですが。

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

キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#1

投稿記事 by samusu0905 » 9年前

キャラクターを右に移動させたときに、アニメーションはするんですが、アニメするスピードが早すぎて、
キャラクターの行動が良く見えません・・。
どのような、処理を書けばアニメさせるスピードを変更できますか?
ヒントやアドバイスをお願いします。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#2

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

FPSまたは画像を変える間隔(フレーム数/時間)を制御する処理を書けばといいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#3

投稿記事 by samusu0905 » 9年前

>>みけさん回答有難うございます。
>(フレーム数/時間)
この計算方法を書けば大丈夫そうですか?
とりあえず、実践してみます。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#4

投稿記事 by samusu0905 » 9年前

質問で聞き忘れたことが二つあります。
・フレーム数って、何を意味しますか?
・時間は具体的に何を測るための時間ですか?
以上が質問です。
これがわかれば出来そうです。
回答お願いします。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#5

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

まず誤解がないように言っておくと、ここでの「フレーム数/時間」のスラッシュは割り算ではなくorを表します。
samusu0905 さんが書きました:フレーム数って、何を意味しますか?
フレーム数はフレームの数です。コマ数とも言います。
すなわち、フレームを単位とした時間です。
samusu0905 さんが書きました:時間は具体的に何を測るための時間ですか?
「ための」というのが良くわからないですが、アニメーションで絵が切り替わってから次に絵が切り替わるまでの時間です。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#6

投稿記事 by samusu0905 » 9年前

すみませんが、プログラムを少しだけ書いていただけないでしょうか?
例として書いてくれれば構いません。
書き方が良くわからないので・・。
意味のない質問してすみません。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#7

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

みけCATさんがヒントを出しているので、そこは考えてほしいです。
そこを考えなかったら、この先はもっと苦しくなります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#8

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

samusu0905 さんが書きました:すみませんが、プログラムを少しだけ書いていただけないでしょうか?
例として書いてくれれば構いません。
プロジェクトや画像の作成を除いて約3分半、テンプレートを含めて40行で書けました。
提示を要求する前に、自分で考えてみてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

much

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#9

投稿記事 by much » 9年前

みけCAT さんが書きました:FPSまたは画像を変える間隔(フレーム数/時間)を制御する処理を書けばといいと思います。
メインループと等倍のフレームで右に動かしてもそんなに速くならんから
別の部分にも問題持ちなんじゃね?
(DXライブラリの仕様詳しくは知らんけど,クロックによる差なのかな... そんなことはなさそうやけど)


とりあえずsamusu0905さん
スピードが速すぎるコードを見せてくださいな

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#10

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

> muchさん

ご回答ありがとうございます。
利用規約に書き込みは丁寧語で書いてくださるようお願いをしておりますのでご協力のほどよろしくお願い致します。
http://dixq.net/board/board.html

much

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#11

投稿記事 by much » 9年前

Dixq (管理人) さんが書きました:> muchさん

ご回答ありがとうございます。
利用規約に書き込みは丁寧語で書いてくださるようお願いをしておりますのでご協力のほどよろしくお願い致します。
http://dixq.net/board/board.html

すいません
かなり言葉が汚くなっていますね
規約のほう見させてもらいまいした
これから気をつけさせて頂きます


私の回答,質問等を不快に思われた方は本当に申し訳ありませんでした
私側としては,敬語を一部崩すことにより,より親密なコミュニケーションを取ろうとしただけで
質問者,回答者等を馬鹿にしたり誹謗中傷したかったわけではないですので
あまり気になさらないようにしてもらえるとありがたいです

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#12

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

muchさん、よく読んでもらうと分かると思いますが、質問者さんの質問は移動速度ではなくアニメの再生速度に関する質問です。
秒間60コマだと早過ぎるという話です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

さんど

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#13

投稿記事 by さんど » 9年前

まず、メインとなるwhile文のループがあるかと思います。
フレームとは、基本的な1回の画面処理のことです。
メインのwhile文を1周することを、1フレーム経過する、と言います。
アニメーションの速度が早すぎるのは、恐らく1フレーム毎にキャラクターの画像を変更しているからだと思います。
なので、例えばwhile文を60周したら次の画像に切り替える、という処理を作成すれば、
アニメーションの速度はゆっくりになります。

以下例です。(仕組みの説明なので、エラー対応がされていないとかのツッコミはしないで下さい)

コード:

// メインループの中でループを1周する度に数字が増えていくカウンタを定義します
unsigned long frame = 0;
// 例えば、3枚の画像を使ってアニメーションするとします
const int IMAGE_PATTERN_MAX = 3;
// 現在の画像パターン。例えば1枚目の画像を表示するときは1。3枚目の画像を表示するときは3になります
int image_pattern = 1;

// メインループ
while(true){
    // フレーム(ループ回数)が60の倍数のとき、表示する画像パターンを切り替えます
    if(frame % 60 == 0){
        // 画像を次のパターンに切り替える(1枚目を表示しているなら2枚目に切り替える。2枚目なら3枚目を。)
        // ただし、3枚目を表示しているときは次の画像(4パターン目)は存在しないため、1枚目に戻ります
        if(image_pattern < IMAGE_PATTERN_MAX){
            image_pattern++;
        }else{
            image_pattern = 1;
        }
    }

    // 現在のimage_patternの画像の表示処理を書く
    // 例えばDxLibなら、DrawGraph(x, y, handle[image_pattern], FALSE) など
    
    // ループの最後なので、フレーム数のカウンタを増やします
    frame++;
}
皆様
フレームの概念が分かっていないのに、自分で考えろというのは厳しすぎるでしょう。
初心者に対して、基本的な概念だから自分で仕組みを考えられないのはダメ、というのは厳禁かと。
少なくともフレームとは何かをもう少し詳しく説明しなければ、自分で考えたところで答えが出ない可能性も大いにあります。
質問者にとっては、「プロジェクトや画像の作成を除いて約3分半、テンプレートを含めて40行で書けました。」と言われても
だから何なの?としか思えないでしょうし、40行も何を書いたらいいのだろう、とすら思うかもしれません。
煽るような太文字も止めるべきですし、
「そこを考えなかったら、この先はもっと苦しくなります。」という発言も、確かに正しいかもしれませんが、
質問者を不快にさせるだけで誰も特はしないので止めるべきかと。
(もちろん考えさせることも必要ですし、この掲示板のありかたとして正しいと思いますが、
・質問をしたら、自分で考えろと言われた。
・ヒントを貰ったものの、それでも分からないので教えてくださいと言ったら、「自分で考えないと今後はもっと苦労するぞ」と言われた。
こんなものは、新入社員を鬱にして辞めさせる定番のパターンです)

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#14

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

samusu0905さんの過去の質問を読んでいただけると分かると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

さんど
記事: 2
登録日時: 9年前

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#15

投稿記事 by さんど » 9年前

softya(ソフト屋) さんが書きました:samusu0905さんの過去の質問を読んでいただけると分かると思います。
だからといって、質問者様に必要以上に厳しく当たるべき理由にはなりませんし、
不快にさせないよう言葉を選ぶこともできるはずです。
これ以上は、ここでお話しすべきことではないので、ここまでで失礼します。

much

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#16

投稿記事 by much » 9年前

softya(ソフト屋) さんが書きました:muchさん、よく読んでもらうと分かると思いますが、質問者さんの質問は移動速度ではなくアニメの再生速度に関する質問です。
秒間60コマだと早過ぎるという話です。
成程、そっちですね

とりあえずアニメーションが動いているのなら
何処かに1コマ1コマを表す変数が含まれているはずです

そのコマ数に対して
1コマおきのアニメ(1/60秒に一コマ)だと
0,1,2,3,4,...
2コマおきだと(1/30秒に一コマ)
0,2,4,6,8,...
3コマおきだと(1/20秒に一コマ)
0,3,6,9,12,...

...

そういう条件のときにアニメイメージを変えればいいわけです

おそらく今の状況だと 右への移動アニメーション も1番上の「1コマおき」の状態になっているので
1秒にx座標が60動くほう(おおよそ画面の1/10程度の移動) は目視できるけど
60枚のアニメイメージがあったにしてもたった1秒で終わるアニメーション はよく見えないのです
(右への移動が「1コマおき」という証拠はないけど,フレーム処理ができていないという点より推測しました)

ISLe()

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#17

投稿記事 by ISLe() » 9年前

さんどさんは自分でsamusu0905さんを最後まで面倒見る気がないくせに他の回答者を批判するのでしょうか。

だいたい、みけCATさんは、画像を変える間隔を制御すれば良い、と書いており、その間隔はフレームあるいは特定の時間間隔であると補足されています。
それを勝手にフレーム依存に変換しているのは誰なのか。

おそらくsamusu0905さんであればどこかにwhile文をそのまま放り込んで動かないとおっしゃる可能性が高いです。
その場合は、さんどさんが責任を持つのが筋だと思います。
もちろん杞憂であることを望みますが。

さんど
記事: 2
登録日時: 9年前

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#18

投稿記事 by さんど » 9年前

ISLe() さんが書きました:さんどさんは自分でsamusu0905さんを最後まで面倒見る気がないくせに他の回答者を批判するのでしょうか。

だいたい、みけCATさんは、画像を変える間隔を制御すれば良い、と書いており、その間隔はフレームあるいは特定の時間間隔であると補足されています。
それを勝手にフレーム依存に変換しているのは誰なのか。

おそらくsamusu0905さんであればどこかにwhile文をそのまま放り込んで動かないとおっしゃる可能性が高いです。
その場合は、さんどさんが責任を持つのが筋だと思います。
もちろん杞憂であることを望みますが。
一つの考え方として例を示しているにすぎません。
質問者様のレベルとして、「その間隔はフレームあるいは特定の時間間隔である」という答えのみで理解できるとは思えません。
概念の説明のためフレーム依存とするのは、最も簡単で適切な例かと思います。
(他の方法を試すのは、フレーム依存の方法を理解した後にすべきでしょう)
一方的に回答だけ残して去るつもりもありませんからご安心ください。
まずは質問者様の反応を待ちましょう。

ISLe()

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#19

投稿記事 by ISLe() » 9年前

アニメーションのカウンタが 0 ~ (m-1) まで変化するとしたら、
0 ~ (m*n-1) までカウントするようにして、画像選択時に nで割ってから使えばnコマずつの変化になります。
これは画像を変える間隔を制御する方法ですが、フレームや時間を前提としません。

いつもsamusu0905さんの質問は予想の遥か斜め上をいくのでまったくの見当違いである可能性があります。
例えば右に移動するときだけカウントが重複していてアニメがコマ飛びしているとか。

フレームに依存する、というのはフレームごとに処理するということではありません。
カウントが特定の数値で割り切れるときのフレームだけといったフレームに依存する処理は別の不具合を引き起こす要因となります。

アバター
usao
記事: 1887
登録日時: 11年前

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#20

投稿記事 by usao » 9年前

>どのような、処理を書けばアニメさせるスピードを変更できますか?
>ヒントやアドバイスをお願いします。


アニメーションとは 描画する画像を適切に切り替えること (…でいいんですよね?)
 ↓
現在,このことに関して 何らかの制御を おこなっているハズ.
例えば,表示すべき画像が
 画像1→ 画像2→ 画像3→ 画像4→ 画像1→ 画像2→ …
のように切り替わるように「どこかで」「どうにかして」いるはず.
 ↓
しかし現状の実装だと この切り替えが早すぎる というのが問題になっている.
 ↓
ならば,この切り替え処理(の,「どうにかして」の部分)を,例えば
 画像1→ 画像1→ 画像2→ 画像2→ 画像3→ 画像3→ 画像4→ 画像4→ 画像1→ 画像1→ 画像2→ 画像2→ …
のように変えたとしたら,アニメーションの速さはどうなるだろうか?


「フレーム」や「時間」という単語を使わずに書いてみた
>ヒント
のつもり…… わかりやすいでしょうか.
オフトピック
他の方々もかなり辛辣(?)ですが,
>質問者様のレベルとして…
という書き方も わりかし辛口な気がするような(?)

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#21

投稿記事 by samusu0905 » 9年前

回答者の皆さん、返事が遅れて誠に申し訳ございませんでした・・。


>とりあえずsamusu0905さん
>スピードが速すぎるコードを見せてくださいな
コードの提示をしてませんでしたね。
すみませんでした。

コード:

//***************************************************************
//                          プレイヤー処理
//***************************************************************
#include <stdio.h>				//C言語
#include <stdlib.h>				//C言語
#include "Def.h"				//共通定義
#include <string.h>				//文字列
#include "DxLib.h"				//DXLib
#include "Player.h"				//プレイヤー

//グローバル変数宣言----------------------
int p[16];				//画像分割のハンドル
int px=150, py=320;		//画像のx,y座標
int i=11;			        //ロードしたグラフィックのフレーム番号


//グローバル変数参照----------------------
extern int Key[256];	//キーが押されているフレーム数の格納
extern int flg;			//アニメフラグ


//開始----------------------------------------------------------------------
void gpStart()
{
	//今は何もしない
}


//メイン--------------------------------------------------------------------
void gpMain()
{
	gpMove();
}


//描画----------------------------------------------------------------------
void gpDraw()
{
	//アニメフラグがONで、且つ方向キーの右が押されていれば
	if( flg == ON && Key [KEY_INPUT_RIGHT] >= 1 || 
		Key [KEY_INPUT_UP] >= 1 || Key [KEY_INPUT_DOWN] >= 1)
	{
		//フレームの減算
		i--;
		//グラフィックの描画
		DrawGraph(px, py, p[i], TRUE);

		if( i == 8)
			i = 11;
	}
	else
	{
		i= 11;
		DrawGraph(px, py, p[i], TRUE);
	}
}

//移動------------------------------------------------------------------------
void gpMove()
{
	//方向キー下を押下したら
	if(Key [KEY_INPUT_DOWN] >= 1)
	{
		//flg = ON;
		py += 6;
	}
	else
	{
		flg = OFF;
	}

	//方向キー上を押下したら
	if(Key [KEY_INPUT_UP] >= 1)
	{
		//flg = ON;
		py -= 6;
	}
	else
	{
		flg = ON;
	}

	//方向キーの左を押したら
	if(Key [KEY_INPUT_LEFT] >= 1)
	{
		flg = ON;		//アニメフラグをONにする
		px -= 6;
	}
	else
	{
		flg = OFF;
	}


	//方向キーの右を押したら
	if(Key [KEY_INPUT_RIGHT] >= 1 )
	{
		flg = ON;		//アニメフラグをONにする
		px += 6;
	}
	else
	{
		flg = OFF;
	}
}
一応提示しますが、これは自作で作ったプレイヤーの処理のソースファイルです。
このソースファイルの中の自作関数gpDraw()がアニメさせる際の処理コードです。

返事が遅れて本当に申し訳ございませんでした><・・・。
仕事が急に忙しくなっていたので、PCを開く余裕さえありませんでした・・。

much

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#22

投稿記事 by much » 9年前

samusu0905 さんが書きました:回答者の皆さん、返事が遅れて誠に申し訳ございませんでした・・。
私も口悪くて申し訳なかったです

なるほど
p[10]→p[9]→p[8]
と画像がアニメーションするわけですね


私が見たかったのはその gpDraw関数 を呼び出している部分だったのですが
メインループ中に1フレーム1回の描画になってませんか

要するに

コード:

while(/*ホニャララ(終了条件を満たさないとき)*/){
    /*ホニャラララララ*/

    gpDraw();

    /*ホニャラララララ*/
}
となってませんか?

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#23

投稿記事 by samusu0905 » 9年前

>>muchさん回答有難うございます。
>私も口悪くて申し訳なかったです
いえいえ、とんでもないです。

そうですね。まあ、そのようなコードはMain.cppで書いてます。gpDraw()関数もMain.cppの中のメインループ中
に呼び出してます。

コード:

while( ScreenFlip()==0 &&ProcessMessage()==0 && ClearDrawScreen()==0 &&  gpUpdateKey()==0){

		   switch(SceneMode)
		   {
		   case MODE_TITLE:		//タイトル
			   gtMain();		//メイン
			   gtDraw();		//描画
			   break;

		   case MODE_STAGE:		//ステージ
			   gsMain();		//メイン
			   gsDraw();		//描画
			   break;
		   }

		   //ESCキー押下で終了
		    if( CheckHitKey(KEY_INPUT_ESCAPE) == 1 ){
                        break;
                }
	}
確かになってます。
私はプレイヤー処理のgpDraw()関数内で移動の際にアニメするスピードを下げたい考えてます。
1フレームを60秒に1コマ動かすのでは、アニメするスピードが早すぎるのでもっとスピードを下げたいと
考えてます。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#24

投稿記事 by samusu0905 » 9年前

実はMain.cppで呼び出す前に、Stage.cppでgpDraw()関数を呼び出しています。

コード:

//描画----------------------------------------------------------
void gsDraw()
{
	DrawGraph(0,0, s, TRUE);
	//ステージで描画する処理
	gpDraw();
}
ここのソースコードでは、while文は利用してません。
そのまま呼び出しをしているだけです。
もしかして、ここで行わなければならない処理でもありますか?
あるのあれば、ヒントとなるコードを提示してもらえると幸いです。

much

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#25

投稿記事 by much » 9年前

samusu0905 さんが書きました: もしかして、ここで行わなければならない処理でもありますか?
あるのあれば、ヒントとなるコードを提示してもらえると幸いです。
>>>ないです

要するに例えば現状の1/3倍速にしたい場合は
1回目に関数を通った場合はiを-1
2回目,3回目はiはそのまま
4回目はiを-1
・・・
となればいいんですよね

つまり
通った回数=1フレーム
という意味なので

現在のフレーム数を表す変数を frame(0スタート) とすると
frameが0,3,6,9・・・のときにiを-1していけばいいんです

そうです frameが3で割れる時です



↑の黄色の字で日本語で書かれたことを、
そのままプログラムに訳して記述してやれば終わりです

much

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#26

投稿記事 by much » 9年前

much さんが書きました:
samusu0905 さんが書きました: もしかして、ここで行わなければならない処理でもありますか?
あるのあれば、ヒントとなるコードを提示してもらえると幸いです。
>>>ないです
いや、ないっていったら嘘になる
その関数に通るタイミングの方を3で割れるときにすればいいから

そのときは上のiを減算するタイミングを調整する必要がない

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#27

投稿記事 by samusu0905 » 9年前

>>muchさん回答有難うございます。
>その関数に通るタイミングの方を3で割れるときにすればいいから
>そのときは上のiを減算するタイミングを調整する必要がない
これって具体的にどうゆうことですか?
すみません。まだ、いま一歩理解しずらいです・・。
ごめんなさい。

much

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#28

投稿記事 by much » 9年前

samusu0905 さんが書きました:>>muchさん回答有難うございます。
>その関数に通るタイミングの方を3で割れるときにすればいいから
>そのときは上のiを減算するタイミングを調整する必要がない
これって具体的にどうゆうことですか?
すみません。まだ、いま一歩理解しずらいです・・。
ごめんなさい。
関数に入るタイミングを1/3にするか
関数内のiを減算するタイミングを1/3にするかの違い

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#29

投稿記事 by samusu0905 » 9年前

>>muchさん回答有難うございます。

>関数に入るタイミングを1/3にするか
>関数内のiを減算するタイミングを1/3にするかの違い
なるほど、そうゆうことですか。やっと理解で来ました。
有難うございます。
では、実践してみます。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#30

投稿記事 by samusu0905 » 9年前

>>muchさん
muchさんの言われた通りに実践したら、実現できました!
ソースコードを載せます。

コード:

//描画----------------------------------------------------------------------
void gpDraw()
{
	//アニメフラグがONで、且つ方向キーの右・上・下が押されていれば
	if( flg == ON && Key [KEY_INPUT_RIGHT] >= 1 || 
		Key [KEY_INPUT_UP] >= 1 || Key [KEY_INPUT_DOWN] >= 1)
	{
		//グラフィックの描画
		DrawGraph(px, py, p[i], TRUE);

		//1/4の確率
		if(rand()%5== 0)
		{
			i--;		//iを-1減算する
		}

		//i(フレーム)が7なら
		if( i == 7)
		{
			i = 10;		//i(フレーム)を10に戻す
		}
	}
	else//そうでなければ
	{
		i = 11;			//i(フレーム)はそのまま
		//グラフィックの描画
		DrawGraph(px, py, p[i], TRUE);
	}
}
二番目の「関数内のiを減算するタイミングを1/3にする」これを利用させてもらいました。
直ぐにできました。丁寧な説明有難うございました。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#31

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

色んな意味でアウトです。
一番ダメなのは目的が達成されていないことです。解決してませんよ。考えてみてください。
あとは、ゲームプログラミングの館を読んで勉強しましょう。関数の役割分担が不明確に成っています。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#32

投稿記事 by samusu0905 » 9年前

>>softyaさん
目的は達成できましたけど。
私は二つのやり方の内、一つを選んでプログラム書きました。
そもそも、私の目標はアニメするスピードを下げることを目的にしていました。
softyaさんの言う「目的」ってなんですか?
私は目的を達成したつもりです。
移動時のフレーム切り替えも、切り替えるスピードを下げたので。


>関数の役割分担が不明確に成っています。
関数はきちんと役割分担はできてるはずですが・・・。
不明確な関数って、もしかしてgpDraw()関数のことですか?
でしたら、その関数のどこがどのように問題なのか、
そこを具体的に教えてほしいです。
ただ「関数の役割分担が不明確に成り立っている」と言われましても、正確に言ってくれないと困ります・・。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#33

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

乱数の意味が分かっていますか? 連続して同じ値が出ても乱数としては正しいのですよ。
1/5の確率は確率であって1/1で動作する可能性があるので、アニメのコマは一様には変化しない事になります。
つまり、アニメのコマ数は不規則に変化して一秒あたりのコマ数は減速したり加速したりします。

>不明確な関数って、もしかしてgpDraw()関数のことですか?
>でしたら、その関数のどこがどのように問題なのか、
>そこを具体的に教えてほしいです。

gpDraw()でアニメコマの計算しているところとかキーを判断している所です。
特にキーは拡張性とメンテナンス性を下げるので良くないです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#34

投稿記事 by samusu0905 » 9年前

>gpDraw()でアニメコマの計算しているところとかキーを判断している所です。
>特にキーは拡張性とメンテナンス性を下げるので良くないです。
了解しました。警告有難うございます。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#35

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

samusu0905 さんが書きました:>gpDraw()でアニメコマの計算しているところとかキーを判断している所です。
>特にキーは拡張性とメンテナンス性を下げるので良くないです。
了解しました。警告有難うございます。
乱数を使うという一番重要な欠陥の方は良いのでしょうか?

【補足】
乱数と確率がよく分からなかればサイコロを用意して12回ふって、それぞれ出た数をメモってみてください。
1が何回出ますか? 1/6の確率なので12回なら均等に2回でないとsamusu0905さんの想定する目的は果たせないはずです。
実際には、そんな都合の良い出方はしないはずですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

だんごさん
記事: 273
登録日時: 12年前

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#36

投稿記事 by だんごさん » 9年前

正解は1つというわけではありませんが、やはりフレーム数で判定する方法が妥当だと思います。
samusu0905 さんが書きました:

コード:

//1/4の確率
if(rand()%5== 0)
{
    i--;        //iを-1減算する
}
これはランダムな値を5で割った余りが0だったらという風に書いています。
もし連続して余りが0の値だったら連続的に動いてしまうし、どちらかというとカクついた感じになると思います。

これまで出てきたフレーム数というのは、whileの繰り返した回数みたいなものです。絶対と言えばウソですが。
単純に
static int i = 0;
i++;
を描画部分に書いたとすると、iの値が描画部分を通った回数になります。
描画部分を通った回数のスピードでアニメーションが表示されます。
これを遅くしたいという質問だと思うのですが、仮にカウントされたiの値が3だった場合、画像を切り替えてiの値を0に戻す、という作業で表示を遅くすることができます。
0と1と2の時は画像の切り替えは行われませんから。
割った余りでも何でもいいですが、そのようにして判定されるのはいかがでしょうか?
もしランダムな値を希望していたのなら無視してください。
 Dango San

アバター
usao
記事: 1887
登録日時: 11年前

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#37

投稿記事 by usao » 9年前

オフトピック
>1/5の確率は確率であって1/1で動作する可能性があるので、アニメのコマは一様には変化しない事になります。
>つまり、アニメのコマ数は不規則に変化して一秒あたりのコマ数は減速したり加速したりします。

>もし連続して余りが0の値だったら連続的に動いてしまうし、どちらかというとカクついた感じになると思います。


本人だって動作確認してるハズですから,当然 言われるまでも無く
このような事象を観測しているはずであり,
その上で 目的は達成した とされているのですから,実はこれが目指した形だったということでは?
(そうでなければ唐突に rand() とか出てこないでしょうし)

much

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#38

投稿記事 by much » 9年前

なんのアニメーションかはわかりませんが
おそらく等間隔で動いていないかと思います
( rand()%20== 0 とすればみやすいかな...)

例えば歩行アニメーションなら
確率が1/5であるだけなら
極端な話無限に同じイラストになる可能性もあります
起動毎にアニメーションの変わり方も異なる
カクカクでいろいろと不都合があると思います
(※ただしそういう仕様ならOK)

1/5の確率ではなく
ぴったり5回あるたびに1回
でやってみてください

以下に私のヘッタクソな図を添付しておきます

画像
オフトピック
この画像だけで画像の元ネタのゲームが分かってしまう人は...

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#39

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

どうでもいいかもしれませんが
samusu0905 さんが書きました:

コード:

		//1/4の確率
		if(rand()%5== 0)
		{
			i--;		//iを-1減算する
		}
二番目の「関数内のiを減算するタイミングを1/3にする」これを利用させてもらいました。
直ぐにできました。丁寧な説明有難うございました。
地の文 : 1/3
コメント : 1/4
コード : (約)1/5
どれが求める仕様なのでしょうか…?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#40

投稿記事 by samusu0905 » 9年前

1/3,1/4,1/5にしましたが、やはりカクカクしてしまうので、仕様を1/20ぐらいにしました。
仕様をコロコロ変えてしまい、申し訳なく思います。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#41

投稿記事 by samusu0905 » 9年前

私の仕様としては、アニメさせる時のカクカクをなくして、スムーズにちゃんと動いて見えるようにしたいと考えております。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#42

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

みなさんが提案していることを無視しているのが問題かと思います。
あるいはわからないのかもしれませんが、分からない所を質問してください。
rand()を使ってはいけない理由は理解しましたか? 分からなかれば質問すべきです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#43

投稿記事 by samusu0905 » 9年前

以前、みけさんが「40行書いたらできました」という返事をしていたのですが。
みけさんが書いたそのコードを見せてほしいものです。
どのようなコードを書いてしかも40行で書けたのか知りたいです。
私の間違ったコードとみけさんのコードを比べて、是非答え合わせしたいです。
みけさん、40行で書けたコードの提示をお願いします。
私がそのコードを拝見して、何をどう書いたらいけなかったのかを改善したいです。

私個人としての意見ですが、質問者に考えさせるのは確かに良いことですが、
どうしても思いつかないのに無理やり「まずは自分で考えろ」って何度
言ってもしょうがないと思います。
他の人でも私のような人がいるのではないですか?(必ずとは言えませんが....。)

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#44

投稿記事 by samusu0905 » 9年前

あと、
>みなさんが提案していることを無視しているのが問題かと思います。
これに関してですが、みなさんの意見はまともに聞いてますよ。
ただ、一人ひとりに返事するのって時間かかりますよね?
ですから、みなさんの意見の中で、自分がいいと思う意見だけを取り込んだほうがいいかと思っております。
取り込んでもあまり意味がない意見まで読んでも、無駄だと思いますので。

>rand()を使ってはいけない理由は理解しましたか?
では、どうしてrand()は使わない方がいいのでしょうか?
カクカクしてしまうからですか?

アバター
usao
記事: 1887
登録日時: 11年前

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#45

投稿記事 by usao » 9年前

以下のコードで,Proc()を繰り返し呼んだとき……

(1)CurrPattern と PatternChangeTimingCounter の値はどのように変化していくでしょうか?

(2)「★」というコメントが付いている行にある 20 という値を 別の値(例えば1とか50とか)に変えたとしたら
 前記変化具合はどうなるでしょうか?

コード:

int CurrPattern = 0;
int PatternChangeTimingCounter = 0;

void Proc()
{
  ++PatternChangeTimingCounter;
  if( PatternChangeTimingCounter >= 20 )  //★
  {
    ++CurrPattern;
    if( CurrPattern>=3 )CurrPattern=0;
    
    PatternChangeTimingCounter = 0;
  }
}

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#46

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

そういうお考えなのであれば、私から特にアドバイスはありません。
考え方の違いでしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#47

投稿記事 by samusu0905 » 9年前

>>usaoさん回答有難うございます
>(1)CurrPattern と PatternChangeTimingCounter の値はどのように変化していくでしょうか?
「PatternTimingCounterは関数の最初で+1ずつ加算(インクリメント)します。その後、

if文でPatternTimingCounterが20以上ならCourrPatternを+1加算(インクリメント)します。さらに、

if文でCurrPatternが3以上ならCurrPatternを0に戻す。
最後に、PatternChangeTimingCounterも0に戻す。」

多分こんな感じかなと思います。


>(2)「★」というコメントが付いている行にある 20 という値を 別の値(例えば1とか50とか)に変えたと>したら
> 前記変化具合はどうなるでしょうか?
その場合は、値が違うだけで、PatternChangeTimingCounterが50以上なら
CourrPatternを+1加算(インクリメント)するだけですね。

あの申し訳ありませんが、私はみけさんの40行コードが見たいのですが・・。
自慢気に言っていたので、是非見たいです。
もちろんusaoさんが提示してくれたコードも悪くないと思います。
ただ、一度だけみけさんのコードを確認したいです。

ISLe()

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#48

投稿記事 by ISLe() » 9年前

samusu0905 さんが書きました:ですから、みなさんの意見の中で、自分がいいと思う意見だけを取り込んだほうがいいかと思っております。
取り込んでもあまり意味がない意見まで読んでも、無駄だと思いますので。
ということだから
samusu0905 さんが書きました:>rand()を使ってはいけない理由は理解しましたか?
では、どうしてrand()は使わない方がいいのでしょうか?
カクカクしてしまうからですか?
ということですね。

このスルー力には感服せざるを得ないですね。

#samusu0905さんに関わってろくなことはないと思うのですがあまりに感動したのでつい。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#49

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

書き忘れておりました。
フォーラムルールにありますが、
4. 義務行為

[C言語何でも質問掲示板でのみ適用される事項]

・トピックを立て、解決した場合は「解決しました」とだけ書かず、どうやって解決したか他の人に分かるように書いて  からトピックを終了して下さい。
・複数の回答者がいた場合、都合の良い、または自分の気が向いた回答者にだけ返信を書かず、回答をくれた人 全員に対して出来る限りの返信を書きましょう。
・回答者のコメントの中に複数質問があった場合、出来る限りその全てに答えるようにしましょう。
回答者への返信を怠る、あるいは質問を無視する行為は掲示板の義務違反となります。[少し修正]
という事ですので、掲示板ルールに違反していることはお忘れなきようにお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#50

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

samusu0905 さんが書きました:以前、みけさんが「40行書いたらできました」という返事をしていたのですが。
みけさんが書いたそのコードを見せてほしいものです。
どのようなコードを書いてしかも40行で書けたのか知りたいです。
私の間違ったコードとみけさんのコードを比べて、是非答え合わせしたいです。
みけさん、40行で書けたコードの提示をお願いします。
私がそのコードを拝見して、何をどう書いたらいけなかったのかを改善したいです。
キャラクターの移動などの処理はなしで、アニメーションとその速度変更のみのコードです。

コード:

#include <DxLib.h>

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {
	if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK || DxLib_Init()==-1) return -1;
	SetDrawScreen(DX_SCREEN_BACK);
	
	char Key[256];
	char PrevKey[256];
	char KeyEdge[256];

	const int animeNum=4;
	int graph[animeNum];
	LoadDivGraph("1234.png",animeNum,animeNum,1,100,100,graph);
	int nowAnime=0;
	int animeSpeed=1;
	int animeCount=0;

	while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll(Key) && !Key[KEY_INPUT_ESCAPE]) {

		for(int i=0;i<256;i++)KeyEdge[i]=Key[i]&&(!PrevKey[i]);
		for(int i=0;i<256;i++)PrevKey[i]=Key[i];

		if(KeyEdge[KEY_INPUT_UP] && animeSpeed>1)animeSpeed--;
		if(KeyEdge[KEY_INPUT_DOWN])animeSpeed++;

		animeCount++;
		if(animeCount>=animeSpeed) {
			nowAnime=(nowAnime+1)%animeNum;
			animeCount=0;
		}

		DrawFormatString(10,10,GetColor(255,255,255),"%3dフレームに1回更新",animeSpeed);
		DrawGraph(100,100,graph[nowAnime],FALSE);

		ScreenFlip();
	}

	DxLib_End();
	return 0;
}
添付ファイル
1234.png
テスト用画像
1234.png (541 バイト) 閲覧数: 22227 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#51

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

コメントを追加しました。

コード:

#include <DxLib.h>

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {
	// DXライブラリの初期化・初期設定
	if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK || DxLib_Init()==-1) return -1;
	SetDrawScreen(DX_SCREEN_BACK);

	// キー入力のデータ
	char Key[256]; // 現在のキーの入力状態
	char PrevKey[256]; // 前フレームのキーの入力状態
	char KeyEdge[256]; // このフレームで新たに入力されたキーの状態

	// アニメーションさせる画像に関するデータ
	const int animeNum=4; // 絵の枚数
	int graph[animeNum]; // 絵のデータ
	LoadDivGraph("1234.png",animeNum,animeNum,1,100,100,graph);
	// アニメーションの状態に関するデータ
	int nowAnime=0; // 表示する絵の番号
	int animeSpeed=1; // 絵を切り替えるフレームの間隔
	int animeCount=0; // 絵の切り替えからのフレーム数

	// メインループ
	while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll(Key) && !Key[KEY_INPUT_ESCAPE]) {

		// キー入力のエッジを検出する処理
		// 前フレームで押されてなく、今フレームで押されているキーを調べる
		for(int i=0;i<256;i++)KeyEdge[i]=Key[i]&&(!PrevKey[i]);
		// 今フレームのキーの情報を保存する
		for(int i=0;i<256;i++)PrevKey[i]=Key[i];

		// このフレームでキーが押された場合、アニメーションの速さを変更する
		if(KeyEdge[KEY_INPUT_UP] && animeSpeed>1)animeSpeed--;
		if(KeyEdge[KEY_INPUT_DOWN])animeSpeed++;

		// アニメーション(絵を切り替える)本体の処理
		animeCount++; // 切り替えからのフレーム数をカウントする
		if(animeCount>=animeSpeed) { // 設定したフレーム数が経過したら
			nowAnime=(nowAnime+1)%animeNum; // 次の絵に切り替える
			animeCount=0; // 切り替えからのフレーム数をリセットする
		}

		// アニメーションの速さを表示する
		DrawFormatString(10,10,GetColor(255,255,255),"%3dフレームに1回更新",animeSpeed);
		// アニメーションの絵を表示する
		DrawGraph(100,100,graph[nowAnime],FALSE);

		// 画面の表示を更新する
		ScreenFlip();
	}

	// DXライブラリの終了処理
	DxLib_End();
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

taketoshi
記事: 222
登録日時: 13年前
住所: 日本国

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#52

投稿記事 by taketoshi » 9年前

製作中のSRPGに参考になりそうなコードがあるので晒しておきます
マップ上のユニットチップのアニメーションを制御しています。ただ解り易いように余計なコードは省きました。

AnimeCounter変数が画像の添え字番号を切り替えるためのカウンター変数です。
1フレーム毎にAnimeCounter変数インクリメントしていき、
AnimeCounter変数が15以上になれば画像を描画するための添え字番号変数をインクリメントしAnimeCounter変数を0に初期化します。

定義はこちら

コード:

class CCharcterBase{
//他省略
protected:
	int AnimeCounter;
};

コード:

//-----------------------------------------------------------------------------
// 名前 : CountUpTipAnimationNumber
// 引数: 
// 関数の説明:ユニットのチップ画像を動かすための添え字番号をカウントアップする
//-----------------------------------------------------------------------------
void CCharcterBase::CountUpTipAnimationNumber(){
	if(AnimeCounter > 15){
		switch(eMoveTransfer){
				case Free:	//キャラクターが静止している場合のチップ画像の計算。この時の画像添え字番号は0から3まで
					if(nTipAnimationNumber >= 3){nTipAnimationNumber = 0;}
					else{nTipAnimationNumber++;}
					break;
		AnimeCounter = 0;
	}
	AnimeCounter++;
}
余計な所は省略しています。

描画はこんな感じ

コード:

	DrawGraph(Position.x - ,Position.y -,ud.strUnitData.lpTipHandle[nTipAnimationNumber],true);//読み込んだ画像に対してインクリメントしてるチップ番号を添え字にする
10行目でif(AnimeCounter > 15) で設定値を15としていますがFPS60に対して設定した標準のスピードです。
3にすると15に対して5倍のスピードになり、30にすると15に対して1/2のスピードになります。

//このコードで静止しているユニットやマップ上で動いているユニットのアニメーションを制御しています
[youtube][/youtube]


*書いてる間にミケ猫さんのコードが追加されました
*内容はほとんど一緒です。

much

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#53

投稿記事 by much » 9年前

ISLe() さんが書きました:
samusu0905 さんが書きました:ですから、みなさんの意見の中で、自分がいいと思う意見だけを取り込んだほうがいいかと思っております。
取り込んでもあまり意味がない意見まで読んでも、無駄だと思いますので。
ということだから
samusu0905 さんが書きました:>rand()を使ってはいけない理由は理解しましたか?
では、どうしてrand()は使わない方がいいのでしょうか?
カクカクしてしまうからですか?
ということですね。

このスルー力には感服せざるを得ないですね。

#samusu0905さんに関わってろくなことはないと思うのですがあまりに感動したのでつい。
これは回答者側の説明力の無さもあるんだと...
自分が教えているくせに,なんでわからないんだと叱る教師の如し
samusu0905 さんが書きました: ですから、みなさんの意見の中で、自分がいいと思う意見だけを取り込んだほうがいいかと思っております。
取り込んでもあまり意味がない意見まで読んでも、無駄だと思いますので。
私もそう思います,
現に前に教えていた方法(%演算子でやる方法)今の方法(毎回リセットする)やりかたで異なりますし
場合によっては混乱を招くかと思います

ただ回答者側としては無視され続けられると悲しいので
できるだけ返事をしてあげてください
(「○○さんのは直感的にわかりづらかったので××さんの方の考え方で進めていきます」とか)
samusu0905 さんが書きました: >rand()を使ってはいけない理由は理解しましたか?
では、どうしてrand()は使わない方がいいのでしょうか?
カクカクしてしまうからですか?
1~20の書かれた正二十面体サイコロを振り続けて1が出たときのみ
一マス進め、他の目だと進めないすごろくがあるとする
(※もちろん、無限ループになるので ~戻るといったマスもない)

そのときに
人によって進めた数も異なる(起動毎のアニメーションの異なり)し,
場合によっては永遠に1が出なかったり,1000回連続で出る可能性(乱数の不確か性)
もある

要するに
仮に1が連続で出ればアニメーションが早くて見れないって状態になってマズイわけですよね
そのうえ
1が永遠にで出ずに常に一枚絵って状態も起こりえます
これは起動毎に異なります(乱数なので)

それならば、はじめから 20回毎に1回通るように固定しておけばいいんじゃないかということ
(故障した機械とかのアニメーションなら、味があって結構いいと思いはするんですがね)


その実現例としては
道路に何台通ったかの検査員を用意してその台数が20の倍数(もしくは20回毎にカウントし直して20のとき)になっていれば
別の場所に誘導するみたいな動作を実現すればいいわけです

・何台通ったかを記憶する変数(PatternChangeTimingCounterに該当)
・20の倍数(or20)のときにアニメーションを変える(★に該当)

が必要ってことですね
後はみなさんのコード見てもらえばわかると思います
オフトピック
(わからないなら質問してもいいと思いますよ、わからないのと、無視するのは違いますから
スルーした結果,わからないのではなく, 伝わなかったから,わからないってほうが大きいとも思いますし)

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#54

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

一応過去ログを読まれない方もいるので経緯を説明しておくとsamusu0905 さんからはゲームプログラマーのプロを目指していると説明されています。
新卒では無く、より厳しい中途採用しかない道を選ばれておりますので、それに相応しい考えを身につけてほしいと思っておりました。
samusu0905 さんこれで間違いないですよね? 

「画像の分割描画について」
http://dixq.net/forum/viewtopic.php?f=3 ... 2&start=60
【補足】 ご本人に説明は、ここからですね。プロフィールを見れない方に説明しておくと現在20歳との事です。
http://dixq.net/forum/viewtopic.php?f=3 ... 30#p119685

しかし一向に考えを改められる気がないとしか思えませんので私の出番はここまでと思います。
誰であろうと掲示板ルール違反があれば出てきますが。
それでは失礼したします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

もふらん

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#55

投稿記事 by もふらん » 9年前

samusu0905 さんが書きました:あと、
>みなさんが提案していることを無視しているのが問題かと思います。
これに関してですが、みなさんの意見はまともに聞いてますよ。
ただ、一人ひとりに返事するのって時間かかりますよね?
ですから、みなさんの意見の中で、自分がいいと思う意見だけを取り込んだほうがいいかと思っております。
取り込んでもあまり意味がない意見まで読んでも、無駄だと思いますので。
貴方がどんなにちゃんと聞いてると言っても無視してるようにしか見えないから問題になってるんでしょう。
と言うか自分でも読んでも無駄って言っちゃってますし。ここまで堂々と逆ギレ(しかも自分で自分の首を絞めてる)できる人も珍しいですね。

much

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#56

投稿記事 by much » 9年前

softya(ソフト屋) さんが書きました:一応過去ログを読まれない方もいるので経緯を説明しておくとsamusu0905 さんからはゲームプログラマーのプロを目指していると説明されています。
新卒では無く、より厳しい中途採用しかない道を選ばれておりますので、それに相応しい考えを身につけてほしいと思っておりました。
samusu0905 さんこれで間違いないですよね? 
提示ありがとうございます

企業のゲームプログラマを目指すのであるならば、なかなか厳しいですね...

企業でプログラムを作るときはバグなどは決して許されません
(まぁ、そこらのゲームとかならちょっとした損害とかで済むんでしょうけど
業務会計とか証券の売買,交通の制御に関するプログラムとかだと...)

社会に出すプログラムは
「動けばいい」ではダメです
バグになりそうな因子は徹底的に潰さなければなりません

rand関数を使った時のバグをもうちょと自分で考えてみてください
仮にわからなかったにしても,もうみなさんと協力して何度も表現を変えて書いているつもりです
スレ中の「自分がいいと思う意見」に「必要な知識」が結構抜け落ちている気がします
時間がないのはわかりますが、プログラマを目指すのであればもうちょっと吟味して頂きたいです

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#57

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

ここを読んでいるプログラミング初心者&ゲームプログラマ志望の人のために書いておくと、ゲームプログラマで見本がある&サンプルがある事自体が珍しいです。アプリでも新規業務では過去の参考コードなどありません。ここで必要な能力は、仕様からプログラムを作り出す能力です。

ここでの話だとゲームですが4コマに一回アニメーションを行いたいと言う仕様な訳ですが、それならこういう方法があるなと自分で考え出せないとプログラムなんて実際作れないわけです。
難しい処理の場合、実装方法が考えつかない場合もあるでしょうが、ここで出されたヒントなら必要十分以上です。
少しのヒントや、何なら先輩のノウハウが詰まった実物のゲームの動画をスローで見るなどしてヒントが自分でつかめないと行けないのです。
なによりプログラムやアルゴリズムを考えるのは楽しいはずなので、そこを放棄したらやっている事自体の意味を見失っています。
【補足】職業的にはアルゴリズムを考えるのは必要なスキルです。特にゲームプログラマは出来ないと絶対にダメです。
私なりの見解ですが、参考になればと思い書かせていただきました。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe()

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#58

投稿記事 by ISLe() » 9年前

samusu0905さんのトピックをウォッチしているひとなら、No.21で晒されたコードを見て、samusu0905さんが通った専門学校の学内ライブラリィを使ったサンプルプログラムからのコピペであることに気付いているはずですね。

回答の中にあった%演算子が目に付いたsamusu0905さんは、手元のサンプルコードから%演算子を使った部分をコピペしたと思われます。
こちらは想像ですが。

samusu0905さんの質問に向き合っているふうを装っている回答者も、samusu0905さん自身には向いていないように見えますね。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#59

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

samusu0905 さんが書きました:1/3,1/4,1/5にしましたが、やはりカクカクしてしまうので、仕様を1/20ぐらいにしました。
仕様をコロコロ変えてしまい、申し訳なく思います。
samusu0905 さんが書きました:私の仕様としては、アニメさせる時のカクカクをなくして、スムーズにちゃんと動いて見えるようにしたいと考えております。
「まともな」(絵が等間隔で切り替わる)アニメーションなら、切り替えの間隔が長い方がカクカクすると思いますが…
スムーズにちゃんと動いて見えるようにしたいなら、
例えばゲームが60fpsで、アニメーションを1秒でループさせたいなら、
きちんと60枚の絵を描いてアニメーションも60fpsにするといいと思います。
(半分の30fpsくらいでも大丈夫かもしれないですが)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#60

投稿記事 by samusu0905 » 9年前

いろいろと回答ありがとうございます。
>>softyaさん
>一応過去ログを読まれない方もいるので経緯を説明しておくとsamusu0905 さんからはゲームプログラマーのプロを目指していると説明>されています。
>新卒では無く、より厳しい中途採用しかない道を選ばれておりますので、それに相応しい考えを身につけてほしいと思っておりました。
>samusu0905 さんこれで間違いないですよね?
確かに私は中途採用という難しい道を選ぶことになりましたが、専門学校を卒業しても入社が厳しいと聞いたことがあります。

>>muchさん
>企業でプログラムを作るときはバグなどは決して許されません
>(まぁ、そこらのゲームとかならちょっとした損害とかで済むんでしょうけど
>業務会計とか証券の売買,交通の制御に関するプログラムとかだと...)
>社会に出すプログラムは
>「動けばいい」ではダメです
>バグになりそうな因子は徹底的に潰さなければなりません
そこに関しては私もわかっていることです。 「動けばいい」の発想は十分に理解しております。
私も、ここで質問する前は一人でずっとゲーム作りしていましたから。
個人で作っていても「動けばいいは駄目だ」って思ってましたから。

>ただ回答者側としては無視され続けられると悲しいので
>できるだけ返事をしてあげてください
>(「○○さんのは直感的にわかりづらかったので××さんの方の考え方で進めていきます」とか)
確かにそこは私も同じ考えですが、1~2人ぐらいの回答者には返事かえせそうですが(○○さんのはこうですとか、××さんのはこうですとか)、複数の人数だと(3~5人)、返事返すのに手間がかかりそうです....。

回答してるのに無視されるというのは悲しい事実ですね...。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#61

投稿記事 by samusu0905 » 9年前

>>みけさん
コードの提示ありがとうございます。
コード拝見したところ、私のコードとはかなり異なっています...。
やはりみけさんのコードのほうが正しいということでしょうか。
とりあえず、自分のコードと比較してみます。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#62

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

> 確かに私は中途採用という難しい道を選ぶことになりましたが、専門学校を卒業しても入社が厳しいと聞いたことがあります。

よい質問なので答えておきます。他の人の参考になりますので。
たしかに「専門学校を卒業しても入社が厳しい」ですが、それは大学でも同じです。有名大学の成績優秀者なら別ですよ。
新卒と中途採用の違いは、中途採用はすでに他社の仕事をしていた経験者と争うことになるからです。
当然、「これお願い」ぐらいで仕事ができる事が求められるわけですので、ちゃんと設計からテストまでこなせる実力があることが前提です。
新卒には、そこまで求められませんので、未経験が入るなら新卒というのは間違いではないです。
中途採用に求められることは、すぐにプロの仕事ができる事です。
これを厳しいと言わずなんと言ったら良いでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

much

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#63

投稿記事 by much » 9年前

samusu0905 さんが書きました:>>みけさん
コードの提示ありがとうございます。
コード拝見したところ、私のコードとはかなり異なっています...。
やはりみけさんのコードのほうが正しいということでしょうか。
とりあえず、自分のコードと比較してみます。
あれ・・・
if文の中とアニメスピードを可変にしたりという細かな違いってだけじゃ・・・

AC

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#64

投稿記事 by AC » 9年前

私もド素人もいいところなので大きなことは言えないのですが、
samusu0905さんはコードから(構文ではなく意味合いとしての)ブロックの内容を解釈するのが
かなり苦手なのでは、と思います。
(ロジックと言っていいのだとは思いますが、私が間違えた用語の覚え方をしていそうなので……)
No.45に対するNo.47はもうちょっとこう、違う答え方を求められていたような気がしてなりません。

なので、回答しようと思われる方はこの際samusu0905さんがプロを目指すかどうかはおいておいて、
上記を前提とした回答の仕方をしたほうが変に荒れなくていいのではないでしょうか。

ISLe()

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#65

投稿記事 by ISLe() » 9年前

samusu0905さんが望む回答をするためには、学校で配布されたサンプルコードを入手して、それに沿って回答する必要があると思われます。
みけCATさんのコードがかなり異なるというのは、学校で配布されたコードと見た目が異なるという意味であると思われます。
samusu0905さんが立てた過去のトピックの内容からしておおかた間違っていないと思います。

件の学内ライブラリィは、ネット検索するとかなりのヒット数になるのですが、いまだどこの学校で使われているのか不明です。
なぜかこの点に関しては、箝口令が完璧に行き届いているようです。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#66

投稿記事 by samusu0905 » 9年前

>>ISLeさん回答ありがとうございます。
>samusu0905さんが望む回答をするためには、学校で配布されたサンプルコードを入手して、それに沿って回答する必要があると思われます。
>みけCATさんのコードがかなり異なるというのは、学校で配布されたコードと見た目が異なるという意味であると思われます。
まあ、私が学内ライブラリのコードを提出してなかったのがいけなかったのでしょう。
因みに、学校で配布されたサンプルコードではありません。サークルでC言語を使ったゲームを制作する際にもらったコードです。


>件の学内ライブラリィは、ネット検索するとかなりのヒット数になるのですが、いまだどこの学校で使われているのか不明です。
ここで、学校名を言っても良いのか私も不明ですが、一応名前だけ伝えますね。
日本工学院蒲田専門学校のサークルでもらったコードです。
地区までは言わなくても、検索すれば大丈夫そうですね。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#67

投稿記事 by samusu0905 » 9年前

最初のじてんでお伝えしてなければ、今お伝えします。
今私が利用してゲーム制作に取り組んでいるライブラリはDXLib.hです。
私はまずどこでもいいので、ゲーム業界の関連会社に入社したいと考えております。
できれば3Dと2Dゲームの経験をもっと積みたいです。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#68

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

これは、厳しい意見です。
何度も書きましたが自分で考えるようにならないとその可能性も出てきません。
今まで蓄えたコード全部捨てて、サンプルは一度理解したら二度と見ないぐらいの覚悟がないとここで行き詰まります。
すでに行き詰まっているですが、ご自覚はありますか?
私から見て、半年前から全くと言って良いほど進歩されていません。
コピペ改変をしている限り進歩はないと思ってください。
私からは以上です。

今までしてきたのはプログラミングもどきで、プログラミングごっこにすぎないと言うことです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#69

投稿記事 by samusu0905 » 9年前

なぜそんなことが言えるんですか?
たとえコピペして改変しても、理解すればいいかと思いますが。

>今まで蓄えたコード全部捨てて、サンプルは一度理解したら二度と見ないぐらいの覚悟がないとここで行き詰まります。
そのような人は少ないかと思います。絶対に忘れないという能力を持つ人は少人数だと思います。
確かに、完全に資料やサンプルコードを見ないで出来る人はとても優れていると思います。
Softyaさんもそのうちの一人ってことですね。
私もなるべく見ないで書けるレベルになりたいと考えております。
そもそも、Softyaさんは言語勉強して何年も経っているので、二度と見ないで出来るのは当たり前だと思います。

それに対し、私は言語を勉強してまだ半年しか経ってませんから。Softyaさんとは比べられません。

>今までしてきたのはプログラミングもどきで、プログラミングごっこにすぎないと言うことです。
Softyaさんがこのように思うのは勝手ですが、私自信そのようには思えません。

much

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#70

投稿記事 by much » 9年前

samusu0905 さんが書きました:なぜそんなことが言えるんですか?
たとえコピペして改変しても、理解すればいいかと思いますが。
理解することに関してはいいとは思うけど,書く力はつかない

英語は読めるけど話せないみたいな状態に陥る
なのに通訳目指すみたいな

個人的な意見としては
最初のうちはいろんなアルゴリズムみて混乱するから、それでいいとは思います

専ら改造するためにそのコードの意味を考えることにはなりますから
samusu0905 さんが書きました: >今まで蓄えたコード全部捨てて、サンプルは一度理解したら二度と見ないぐらいの覚悟がないとここで行き詰まります。
そのような人は少ないかと思います。絶対に忘れないという能力を持つ人は少人数だと思います。
×絶対忘れない
○アルゴリズムの要点を覚えて再構築する

言い回しは変わっていいけど,要点を抑えていつでもどこででも書ける力が必要ってこと
いくら古文が好きな人でも源氏物語の原文すべてを一度見て一文字も間違わずに書ける人はまずいないでしょう
ストーリーの内容さえ覚えていればそれでいいのです
samusu0905 さんが書きました: 私もなるべく見ないで書けるレベルになりたいと考えております。
その意気で頑張ってください
今のところ,回答者によってはその力の無さからやる気が無いように見られているみたいです
samusu0905 さんが書きました: それに対し、私は言語を勉強してまだ半年しか経ってませんから。Softyaさんとは比べられません。
その半年間でどれだけの勉強時間があったかはわかりませんが
思ったよりちょっと長めに感じます
samusu0905 さんが書きました: >今までしてきたのはプログラミングもどきで、プログラミングごっこにすぎないと言うことです。
Softyaさんがこのように思うのは勝手ですが、私自信そのようには思えません。
私もそのプログラミングごっこを昔はやってましたが
自分で書く訓練をしたほうが明らかに伸びが早いのが実感できました

私の場合最初に書く訓練をしなった理由の全部は
MS製のあの初心者には煩わしいプロジェクトの設定やバージョンによる仕様の変更のせいで
動かし方がわからなかったことです

もしかして理由が同じだったりしますか?

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

Re: キャラクターにアニメーションさせるスピードを遅くしたいのですが。

#71

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

> 私は言語を勉強してまだ半年しか経ってませんから。

前にも言いましたが嘘は書かないでださい。5月に6ヵ月から9ヵ月勉強していならすでに10ヵ月以上ですので、まもなく1年です。
オフトピック
初心者の方へ。
よく分からないものはコピペをするのはごく自然です。それを改変するのも良い勉強になります。
でも目的は、あくまで理解のすることで、まるまる覚えることではありません。
コピペや軽い改変だけをいつまでも続けていても行き詰まります。
理解すること、これが目的なので間違わないでください。

サンプルありませんか。元となるソースが無いと作れません。コードを書いてください。
これから脱するのは自分で考えるしかありません。
博士号レベルが考えた高難度アルゴリズムまで自分で考えろというのではありません。
高難度アルゴリズムはありがたく使わせてもらうとして、自分で考えれるものは自分で考えましょうよと言う話です。
そうしないと何も作れないプログラミングごっこで終わってしまいます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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