上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

line

久しぶりに戻ってきました。
フィギュア作成の趣味に走っています!
まず、作成する前にイメージを固める。
っと思い、ラフ画を描き始める。が、しかーし、シャーペンと鉛筆が見当たらない・・・・・・・。
ボールペンによる一発描きを試みる。それも下書きなしで(笑
まっ、目的自体フィギュアでイラストを描くわけじゃないから、イイヤ・・・。

fi02.jpg

結果的に思いっきり失敗した・・・・(ぉぃ
描くのに10分程度ですが、最終的には結果がよければ、全て良し!っというスタンスで見なかったことにします。。

次に材料を揃える
fi03.jpg

この時点で材料と計画が違うジャンって突っ込まないでね。
あれなんですよ。色々っと見ていたら脳内でこっちがいいかも!?って変わっていってしまったんだもん。

話を切り替えて組み立て開始なの。
まず、フィギュアから・・・・。

fi04.jpg

次に台座を作成します。
fi05.jpg
fi06.jpg

最後にキャラを載せますーーー。
fi07.jpg

完成です!!
ちょっと、カメラで撮影するときに逆光になちゃった。。。。

スポンサーサイト
line

現在、Javaで作っていたゲームをC++のソースに移行中・・・・・
あれですね!
C++は実行速度が速いですね・・・・・・。
特に描画速度、メモリー関連のポインター部分とか自由自在ですよね。

Javaは自由自在にできないですもの・・・・・・。
Javaでもポインターが使えればいいのになぁ~~~~~~~

line

久々の日記?というのでしょうか?

あれよこれよっと言いながらシューテングゲームを作ってたりします。。
そもそも、シューテングゲームが思いの他、難しい???

どういうことかっというと・・・・・・・・・・
いちば~~ん、大変なのは、弾道計算!
直線に飛ばすだけなら、二次元方程式で楽なんですけど!
だけど~~~~~~~~、弾を螺旋状に広げたり、ボスを中心に弾の回転をしたりさせだすと、
回転行列や内積、外積、それにおける角度計算式、三角関数などの計算式を組み立てる結果に!?
数字が入ってくれれば楽なんですが、時間ごとに座標が変わるので、その数字自体が固定ではなく変動式にして、先ほどの計算式を組み立てる結果になります。
なので、等式変形の方法も必要になるとかーーーー。
挙句の果てに、ジャンプした際の計算式で重力加速度の計算とか物理学がわんさか・・・・・・・・。
もぅ、何なの!!!!???イジメです~~~。

そして、処理速度を速くすることに成功したら、クォリティを上昇して遅くなる、今度はまた、処理速度をの繰り返し。
永遠に続く、無限ループのような・・・・・・・・(遠い目)

さて、この話は置いといて。
現在、四分木分割を作ってたけど、アタリ判定より遅いってどういうことですか~~?

<2D画面において、Aの弾(10個)とBの敵(1000体)の実験結果>
ただしA同士は当たり判定を行わない、B同士も同様
円同士のアタリ判定計算(総アタリ判定)→0.2ms
円同士のアタリ判定計算(四分木分割)→1.3ms

ぐらいかかる。。どういうことなのかサッパリです。何がイケナイ。

line

たぶん、数週間、たったかと思います。

今、現在何しているかというと、Javaでゲーム製作をしてたりします。<ぇ
テトリス風のを作ったりして、のほほんっとしています!
作ってみると、簡単すぎたりします!全てマグカップ流アドリブですけどね。。。

そして。。。
次にJavaでシューテングゲームを作ろうかと思いまして、、
Rectangle関数のあたり判定がおかしい!!なぜ、半分しか反応しないのサ!
私の書き方が間違ってるのかな~~。

そして、面倒くさいので作りました!<ぉぃ

/**
* お互いが四角形の条件で接触しているかどうかを調べます
* ※移動するキャラは移動先の値を足して引数に入れてください。
*
* @x1.......キャラクター1・物1のX座標
* @y1.......キャラクター1・物1のY座標
* @width1...キャラクター1・物1のX座標
* @height1..キャラクター1・物1のX座標
*
* @x2.......キャラクター2・物1のX座標
* @y2.......キャラクター2・物1のY座標
* @width2...キャラクター2・物1のX座標
* @height2..キャラクター2・物1のX座標
*
* return true (緩衝している) false (緩衝していない)
*/
public boolean isHitFellow (double x1, double y1, int width1, int height1, double x2, double y2, int width2, int height2) {
//純粋に各四角形の中心座標を求める
Point center1 = new Point(width1 / 2, height1 / 2);
Point center2 = new Point(width2 / 2, height2 / 2);

//フィールド上のお互いの中心点座標を求める
Point tX1 = new Point(center1.x + (int) x1, center1.y + (int) y1);
Point tX2 = new Point(center2.x + (int) x2, center2.y + (int) y2);

//相手と自分のX・Y座標の距離を求める
Point range = new Point(this.inequality(tX1.x,tX2.x), this.inequality(tX1.y,tX2.y));

//相手と自分の基準となるX・Y座標を求める
Point basis = new Point(center1.x + center2.x, center1.y + center2.y);

if (range.x <= basis.x && range.y <= basis.y) return true;
else return false;
}

/**
* 入力された2つの差を正の数字で返します
*/
private int inequality (int input1, int input2) {
int evaluation1 = Math.min(input1, input2);
int evaluation2 = Math.max(input1, input2);
return evaluation2 - evaluation1;
}

こんな感じかな。。本当にチェック部分が2行で動くのか!?って思われたっと思ふ。
実際はかなりの邪道&悪道アクロバティックソースだったりしますーーーー。
数学の計算式を上手く利用してるのねん。。。
かる~く、解説すると、
「//純粋に各四角形の中心座標を求める」で最初に、2つの四角形の中心点を求める。

「//フィールド上のお互いの中心点座標を求める」で中心座標に変換
なぜなら、X、Y座標が0とは限らないのね。

「//相手と自分のX・Y座標の距離を求める」で自分と相手のX、Y座標の距離の長さを算出しています。
もちろん、正の数字で!

「//相手と自分の基準となるX・Y座標を求める」で自分の横+相手の横、自分の縦+相手の縦の長さを算出します。

最後にチェックなのです~~。
もし、自分と相手に隙間があれば、
距離 > 基準になるんです! 重なっていたら、 距離 <= 基準 こうなるんです。
ようするに距離を調べているんですね。それプラス、Y座標もチェックします。
要するに、頭の使い方。ね、簡単でしょう。。。。
ちょっとしたアルゴリズムプログラムです。
では~

line

ブログを整理しました。

line
line

FC2Ad

・プロフィール

マグ

Author:マグ
ここはマグカップの運営するブログサイトです。
Topページはこちらをクリックしてください。

line
・カレンダー
04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
line
・リンク
line
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。