ロックマンのティウンティウンみたいな表現は
どのようにすれば出来るのでしょうか。
座標を減らしていったりすると
正方形やダイヤの形になってしまいます。
ロックマン
-
管理人
Re:ロックマン
ティウンティウンというのは
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関数を使って若干拡大率を大きくしたり小さくしたりさせながら広げていけばあのようなシーンが実現できる事でしょう。
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:ロックマン
三角関数を使うんですか
難しいです。
やり方がわかりません・・・;;
指摘お願いします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 ;
}
難しいです。
やり方がわかりません・・・;;
指摘お願いします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:ロックマン
最近仕事で三角関数を使う事になって、勉強しました。
下記のサイトが分かりやすかったですよ(^-^)
http://ab.sinryow.net/lesson/sankaku.html
http://homepage1.nifty.com/gfk/sin-cos.htm
下記のサイトが分かりやすかったですよ(^-^)
http://ab.sinryow.net/lesson/sankaku.html
http://homepage1.nifty.com/gfk/sin-cos.htm
-
管理人
Re:ロックマン
サンプル作ってみました。
以下の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周期としています。
以下の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周期としています。