ページ 1 / 1
ロックマン
Posted: 2007年10月02日(火) 18:29
by 夏天
ロックマンのティウンティウンみたいな表現は
どのようにすれば出来るのでしょうか。
座標を減らしていったりすると
正方形やダイヤの形になってしまいます。
Re:ロックマン
Posted: 2007年10月02日(火) 18:50
by 管理人
ティウンティウンというのは
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:ロックマン
Posted: 2007年10月02日(火) 21:14
by 夏天
三角関数を使うんですか
難しいです。
やり方がわかりません・・・;;
指摘お願いします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:ロックマン
Posted: 2007年10月02日(火) 22:16
by 管理人
三角関数というような大そうなものじゃないですよ。
先ほども書いたとおり、角度にcosかsinをかけただけです。
sin PI/2は1ですよね。PI/4は1/√2ですし。
ではちょっとサンプルを作ってみますね。
Re:ロックマン
Posted: 2007年10月02日(火) 22:29
by バグ
Re:ロックマン
Posted: 2007年10月02日(火) 23:03
by 管理人
サンプル作ってみました。
以下の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:ロックマン
Posted: 2007年10月03日(水) 18:33
by 夏天
自分がほしかったティウンティウンそのままです!!
色々といじくってみようかと思います
大変お世話になりました
Re:ロックマン
Posted: 2007年10月03日(水) 22:13
by 管理人
もしプログラムの意味がわからなければ、
0度
90度
180度
270度
の方向へはそれぞれ4ずつ座標をずらし、斜め方向へはx,yを 4/√2 ずつずらせばOKです。
±は任意に付けてください。