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

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

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

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

Processing

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

Q&A

解決済

2回答

525閲覧

prosessingでの当たり判定について

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

Processing

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

0グッド

0クリップ

投稿2024/01/09 15:03

以下のコードで、あと降ってくる敵に球が当たった時に消える当たり判定をつけたいのですが、やり方がわかりません。初歩的な質問で申し訳ないのですが、お教えいただけますと幸いです。

int enemy_x[]=new int[10], enemy_y[]=new int[10];
int enemy_speed[]=new int[10];
int px = 300;
int py = 300;
int tx = 0;
int ty = 0;
int b1x=100;
int b1y=100;

void keyPressed() {
if (keyCode==LEFT) {
px-=10;
} else if (keyCode==RIGHT) {
px+=10;
} else if (keyCode==UP) {
py-=10;
} else if (keyCode==DOWN) {
py+=10;
}

if (key==' ') {
tx=px;
ty=py;
}
}

void setup(){
size(600,600);
for(int i=0;i<10;i++){
enemy_x[i]=int(random(width));
enemy_y[i]=-50;
enemy_speed[i]=int(random(2,6));
}
}

void draw(){
background(255);
fill(#f08080);
triangle(px,py,px-50,py+100,px+50,py+100);
fill(#191970);
ellipse(tx,ty,10,10);
ty -= 2 ;
fill(#66cdaa);
fill(#ff1493);
for(int i=0;i<10;i++){
ellipse(enemy_x[i],enemy_y[i],50,50);

enemy_y[i]+=enemy_speed[i]; if(enemy_y[i]-25>height){ enemy_x[i]=int(random(width)); enemy_y[i]=-50; enemy_speed[i]=int(random(2,6)); } } }

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

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

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

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

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

jimbe

2024/01/09 16:27

コードは、コードのマークダウンを使用してご提示ください。
thkana

2024/01/10 03:38 編集

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12291536477 と同じに見えます... https://teratail.com/help#posted-otherservice に沿って 「やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。 また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。」の対応をしてください。 あちらの質問を削除せよ、という意味ではありませんが...現時点で回答がついていないので削除になりますかね。
guest

回答2

0

ベストアンサー

コードが見にくいので、コードブロックを使ってください(↓の回答コードのようになります)
ヘルプ|質問する時のヒント

質問はいつでも何度でも編集できます。


降ってくる敵に球が当たった時に消える当たり判定をつけたい

円(敵)と円(弾)の当たり判定ですね。

敵の中心と弾の中心の距離が、半径を足したものより小さければ当たっています。
図を見れば一目瞭然なので確認してください。
円と円の当たり判定 - Google 検索

距離を求めるのに「三平方の定理」だのが出てきますが安心してください。
Processingでは距離を求める関数が、すでに用意されているので簡単です。
dist() / Reference / Processing.org

Processing

1// int enemy_x[] こう書いても同じだが、Javaでは↓こっちが推奨 2int[] enemy_x = new int[10], enemy_y = new int[10]; 3int[] enemy_speed = new int[10]; 4int px = 300; 5int py = 300; 6int tx = 0; 7int ty = -100; // 初期値0だと敵に当たってしまう可能性有 8 9 10void setup() { 11 size(600, 600); 12 13 for (int i = 0; i < 10; i++) { 14 enemy_x[i] = int(random(width)); 15 enemy_y[i] = -50; 16 enemy_speed[i] = int(random(2, 6)); 17 } 18} 19 20void draw() { 21 background(255); 22 23 fill(#f08080); 24 triangle(px, py, px - 50, py + 100, px + 50, py + 100); 25 26 fill(#191970); 27 circle(tx, ty, 10); 28 ty -= 2; 29 30 fill(#ff1493); 31 for (int i = 0; i < 10; i++) { 32 circle(enemy_x[i], enemy_y[i], 50); 33 34 enemy_y[i] += enemy_speed[i]; 35 36 // 弾の中心と敵の中心の距離が、弾と敵の半径の和より小さければ当たってる 37 if (dist(tx, ty, enemy_x[i], enemy_y[i]) < (10 + 50) / 2) { 38 ty = -100; // 敵より上に飛ばしとく 39 enemy_y[i] = height + 50; // 画面外に 40 } 41 42 if (enemy_y[i] - 25 > height) { 43 enemy_x[i] = int(random(width)); 44 enemy_y[i] = -50; 45 enemy_speed[i] = int(random(2, 6)); 46 } 47 } 48} 49 50void keyPressed() { 51 if (keyCode == LEFT) { 52 px -= 10; 53 } else if (keyCode == RIGHT) { 54 px += 10; 55 } else if (keyCode == UP) { 56 py -= 10; 57 } else if (keyCode == DOWN) { 58 py += 10; 59 } 60 61 if (key == ' ') { 62 tx = px; 63 ty = py; 64 } 65}

circle() / Reference / Processing.org


この後は自機と敵の当たり判定になるでしょうが、三角形と円の当たり判定はかなり難しいです。
三角形と円の判定処理を知りたいです

自機の当たり判定が大きすぎるとあまり楽しくないので、三角形に収まるぐらいの円として判定したらどうでしょう?
そうすれば弾と敵の当たり判定と同じように作れますね。

あと自機の操作性が悪いのがちょっと気になります。
こういった手法を使うと、スムーズなうえ斜め移動もできるようになります。
processingの備忘録 -キーの検知- - プログラミングの備忘録

投稿2024/01/09 22:12

TN8001

総合スコア9326

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

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

退会済みユーザー

退会済みユーザー

2024/01/09 23:06

ご丁寧にありがとうございます。 助かりました(__)
guest

0

敵と球の座標を比較して当たっていたら消せば良いのでは無いでしょうか。

投稿2024/01/09 16:32

jimbe

総合スコア12648

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問