よくゲームをやっていると、文字や画像が色々なエフェクトで画面に出てきたりしています(横から・点滅等)。
これをDxライブラリで再現しようと思って考えていたのですが、一つのエフェクトを再現するのにかなり長くなってしまって、とても無駄な処理に思えてきます。
何かコードをスッキリさせつつ、エフェクトを再現できるような方法はありませんか?
というより、普通のゲームはエフェクトをどのようにコードを書いているのでしょうか?
ゲーム内の細かいエフェクト
Re:ゲーム内の細かいエフェクト
例えば、文字の点滅やフェードインです。
ゲームのタイトルに入る前に「ボタンを押してください」と表示されていてそれが点滅していたり、
項目が横から流れてきたりするのを表現したいのですがどうもうまくきれいなコードになりません。
ゲームのタイトルに入る前に「ボタンを押してください」と表示されていてそれが点滅していたり、
項目が横から流れてきたりするのを表現したいのですがどうもうまくきれいなコードになりません。
Re:ゲーム内の細かいエフェクト
その程度なら大して複雑なコードにならないと思いますが・・。
例えば点滅させる描画であれば
描画();
を
if( (カウンタ/○)%△ )
描画();
のように書けばいいだけじゃないでしょうか。
カウンタは0から整数で一つずつ増加している数値だとして、その割った余りによって描画するかしないかわけてやれば
簡単に点滅出来そうです。
項目を移動させたいなら項目の座標を計算する関数を作ってやり
void 項目の座標計算(){
for(i=0;i<項目数;i++){
項目.x += 移動量;
項目.y += 移動量;
}
}
void エフェクト制御メイン(){
if(項目の座標が移動中){
項目の座標計算();
}
}
こんな感じで私なら作るでしょうか。
別に配列でもリストでも何でもいいんですが。
計算が単純なら一緒に書いてやってもいいと思いますし、
計算が複雑ならそれを計算する担当の関数を作ってやればどうでしょう?
例えば点滅させる描画であれば
描画();
を
if( (カウンタ/○)%△ )
描画();
のように書けばいいだけじゃないでしょうか。
カウンタは0から整数で一つずつ増加している数値だとして、その割った余りによって描画するかしないかわけてやれば
簡単に点滅出来そうです。
項目を移動させたいなら項目の座標を計算する関数を作ってやり
void 項目の座標計算(){
for(i=0;i<項目数;i++){
項目.x += 移動量;
項目.y += 移動量;
}
}
void エフェクト制御メイン(){
if(項目の座標が移動中){
項目の座標計算();
}
}
こんな感じで私なら作るでしょうか。
別に配列でもリストでも何でもいいんですが。
計算が単純なら一緒に書いてやってもいいと思いますし、
計算が複雑ならそれを計算する担当の関数を作ってやればどうでしょう?
Re:ゲーム内の細かいエフェクト
やっぱりそう書くしかないですよね…
自分のもそう書いているのですが、考えているエフェクトが細かい&多いのでいちいち関数化・分割しないといけないのが非効率な気がしたのですが、やはり地道に書いていくしかないんですね。
自分のもそう書いているのですが、考えているエフェクトが細かい&多いのでいちいち関数化・分割しないといけないのが非効率な気がしたのですが、やはり地道に書いていくしかないんですね。