質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

1回答

689閲覧

Proccessingでシューティングゲームを作成しています。あたり判定を本文の様に考えています

haniwa3

総合スコア25

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

2クリップ

投稿2018/11/11 06:42

自機が発射する弾と敵機の矩形あたり判定について
考えていますが、想定通りにならずに困っています。

当たり判定に必要な情報は

画像の位置と
画像のサイズ(縦と横)

2画像分(今回は敵機と自機が発射する弾)
あれば作成できると考えています。

敵機には配列を使って画像をコピーしています。

イメージは下記の画像となります。
イメージ説明

敵機は向かって右から左に向かって移動していきます。

ソースは下記のように作成しています。
※上記に挙げた情報は全て取得できています。情報は別のクラスから取得して持って来ています。

void atari_hantei(int[][] ew, int[][] eh, int pw, int ph, int sw, int sh){

//敵機の画像情報取得
ew = enemys.get_width();

eh = enemys.get_height();

//自機の画像情報取得
pw = player1.width_size();
ph = player1.height_size();
//弾の画像情報取得
sw = shot.width_size();
sh = shot.height_size();

//X1 + W1 < X2
//=弾の横位置(shot_yoko) + 弾画像の横幅(sw) < 敵機の横位置(enemy_yoko)
//X1 > X2 + W2
//=弾の横位置(shot_yoko) > 敵機の横位置(enemy_yoko) + 敵機画像の横幅(ew[num_x][num_y])
//Y1 + H1 < Y2
//=弾の縦位置(shot_tate) + 弾画像の縦幅(sh) < 敵機の縦位置(enemy_tate)
//Y1 > Y2 + H2
//=弾の縦位置(shot_tate) > 敵機の縦位置(enemy_tate) + 敵機画像の縦幅(eh[num_x][num_y])

if(shot_life == 1){
for(int num_x = 0; num_x < 5; num_x++){
for(int num_y = 0; num_y < 5; num_y++){
if(enemy_life[num_x][num_y] == 1){

int enemy_num = ew[num_x][num_y] * eh[num_x][num_y]; println(enemy_num); if(shot_yoko + sw < enemy_yoko || shot_yoko > enemy_yoko + ew[num_x][num_y] || shot_tate + sh < enemy_tate || shot_tate > enemy_tate + eh[num_x][num_y]){ println("当たってない"); }else{ println("当たり"); } shot_life = 0; enemy_life[num_y][num_x] = 0; enemy_num --; } } }

}
}

##########################################################################

上記のソースが目指しているものは、当たり判定後、当たった敵機の画像が格納されている
配列を調べて、一台ずつ消していくということを目指しています。

この手の処理に詳しい方いらしたら、御教示のほどよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

いくつか方法があると思いますが、

println("当たり")の処理において
敵機の画像を変えるのが簡単かと思います。
敵機のクラスで画像を設定するメソッドを設けておき、
そのクラスで画像を当たった時のエフェクトに変更するのが良いのではないでしょうか。
*確認してませんが、画像をnullにすれば敵機は消えるかも。

画像を削除しなくても、敵の位置を画面外に変更する方法もあります。
println("当たり")の処理において、
敵機の x座標(又はy座標)をマイナス値か+の大きい値にすれば
当たり判定後に敵機が消えるはずです。

投稿2018/11/13 08:33

YOshim

総合スコア1085

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問