ロックマン

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

ロックマン

#1

投稿記事 by 夏天 » 18年前

ロックマンのティウンティウンみたいな表現は
どのようにすれば出来るのでしょうか。

座標を減らしていったりすると
正方形やダイヤの形になってしまいます。

管理人

Re:ロックマン

#2

投稿記事 by 管理人 » 18年前

ティウンティウンというのは
http://d.hatena.ne.jp/keyword/%A5%C6%A5 ... 5%A6%A5%F3
こういうことですか?

これを実現するのは簡単だと思います。私もこのような表現はよくやります。
まず、中心から外に広がる丸いエフェクトの画像を用意します。

ゲームオーバーになった瞬間のロックマンの座標を保存します。その時の時間も保存します。
そこから
PI * 1/4
PI * 2/4
PI * 3/4
PI * 4/4
PI * 5/4
PI * 6/4
PI * 7/4
PI * 8/4
の角度で広げていけば8方向に広がりますよね。
中心座標の決定方法はその場所から、時間をt、角度をangとすると
x = cos(ang);
で求まります。y座標は
y = sin(ang);
で求まります。
DrawRotaGraph関数を使って若干拡大率を大きくしたり小さくしたりさせながら広げていけばあのようなシーンが実現できる事でしょう。

夏天

Re:ロックマン

#3

投稿記事 by 夏天 » 18年前

三角関数を使うんですか
難しいです。

やり方がわかりません・・・;;
指摘お願いしますorz

#include <math.h>
#include "DxLib.h"
#define PI 3.14159
int en;
double enX[8],enY[8];
void thiunset(void){
en = LoadGraph( "data/grap/en.png" ) ;
for(int Z=0;Z<8;Z++){
enX[Z] =300+ cos(PI * (Z+1)/4);
enY[Z] =300+ sin(PI * (Z+1)/4);
}

}
void thiun(void)
{

DrawGraph( enX[0] , enY[0] , en , TRUE ) ;
DrawGraph( enX[1] , enY[1] , en , TRUE ) ;
DrawGraph( enX[2] , enY[2] , en , TRUE ) ;
DrawGraph( enX[3] , enY[3] , en , TRUE ) ;
DrawGraph( enX[4] , enY[4] , en , TRUE ) ;
DrawGraph( enX[5] , enY[5] , en , TRUE ) ;
DrawGraph( enX[6] , enY[6] , en , TRUE ) ;
DrawGraph( enX[7] , enY[7] , en , TRUE ) ;

enY[0]-=2;

enX[1]--;
enY[1]--;

enX[2]-=2;

enX[3]--;
enY[3]++;

enY[4]+=2;

enX[5]++;
enY[5]++;

enX[6]+=2;

enX[7]++;
enY[7]--;


}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){


ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
SetGraphMode( 800 , 600 , 32 ) ;
SetDrawScreen( DX_SCREEN_BACK );
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数
thiunset();
for(int Z = 0 ; Z<50; Z++){
ClearDrawScreen();
thiun();
ScreenFlip();
}

//WaitKey() ;//何か入力があるまで待つ関数

DxLib_End() ;//終了処理をする関数
return 0 ;
}

管理人

Re:ロックマン

#4

投稿記事 by 管理人 » 18年前

三角関数というような大そうなものじゃないですよ。
先ほども書いたとおり、角度にcosかsinをかけただけです。
sin PI/2は1ですよね。PI/4は1/√2ですし。

ではちょっとサンプルを作ってみますね。

バグ

Re:ロックマン

#5

投稿記事 by バグ » 18年前

最近仕事で三角関数を使う事になって、勉強しました。
下記のサイトが分かりやすかったですよ(^-^)

http://ab.sinryow.net/lesson/sankaku.html
http://homepage1.nifty.com/gfk/sin-cos.htm

管理人

Re:ロックマン

#6

投稿記事 by 管理人 » 18年前

サンプル作ってみました。
以下のzipファイル解凍して実行してみてください。
こんなエフェクトでよかったですか?

http://dixq.net/zip/Rockman.zip

変にスマートに書いたり、まとめたりすると余計理解しにくくなると思ったのでちょっと行は長くなっていますが、
そちらで理解されたら纏めてください。
これがいいかどうかわからないので、あくまで一例ということで。
プログラムはこの記事左上のアイコンをクリックすると確認出来ます。

このエフェクトのモデルは先ほどのリンク先
http://d.hatena.ne.jp/keyword/%A5%C6%A5 ... 5%A6%A5%F3
です。
もっと似せたければエフェクトを良く見たら見えるあのワッカを付け足したらいいでしょう。
あと、実際にはαブレンドしてあると思いますので、200位の強さでαブレンドすればもっと似ると思います。

※注意
このサンプルはモニタのリフレッシュレート60hzで正常動作しますので、それよりヘルツが高いと速いモーションになってしまいます。
モニタが60ヘルツじゃない場合は、60ヘルツにするか、スピードであるspdに渡す数値を変更していい速さを見つけてください。
ちなみにティウン1回は0.247秒でしたから、プログラムでは15フレームを1周期としています。

夏天

Re:ロックマン

#7

投稿記事 by 夏天 » 18年前

自分がほしかったティウンティウンそのままです!!
色々といじくってみようかと思います
大変お世話になりました

管理人

Re:ロックマン

#8

投稿記事 by 管理人 » 18年前

もしプログラムの意味がわからなければ、

0度
90度
180度
270度

の方向へはそれぞれ4ずつ座標をずらし、斜め方向へはx,yを 4/√2 ずつずらせばOKです。
±は任意に付けてください。

閉鎖

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