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

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

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

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

Processing

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

Q&A

2回答

6181閲覧

インベーダーゲーム 自機から弾を連射したい

YUMMM

総合スコア7

Java

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

Processing

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

0グッド

0クリップ

投稿2019/08/21 08:41

Processingでインベーダーゲームを作っています。

java

1int w = 10; 2int h = 20; 3int x = 270; 4int y = 445; 5int vy = 7; 6int shot = 0; 7int reset = 445; 8void setup() { 9 size(500, 500); 10 background(0); 11} 12void draw() { 13 background(0); 14 PImage houdai = loadImage("houdai.png"); 15 PImage teki = loadImage("teki.png"); 16 image(houdai, 250, 450, 50, 50); 17 image(teki, 250, 50, 50, 50); 18 if (keyPressed) { 19 y = reset; 20 shot = 1; 21 } 22 if (shot!= 0) { 23 y -= vy; 24 rect(x, y, w, h); 25 } 26 if(y < 0){ 27 shot = 0; 28 } 29}

houdaiからrectを発射しています。キーを押したぶん弾を発射したいです。配列は必要でしょうか?ヒントをください。よろしくお願いします。

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

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

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

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

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

yambejp

2019/08/21 09:22

そもそもインベーダーゲームに連射という機能はなかったと記憶していますが 仮に追加機能だとして、連射のできるインベーダーゲームって 相当退屈なクソゲーだと思いますが大丈夫ですか?
guest

回答2

0

話の前に、drawの中の弾処理まわりは

Processing

1 if (shot!= 0) { 2 y -= vy; 3 if(y < 0){ 4 shot = 0; 5 } else { 6 rect(x, y, w, h); 7 } 8 } else { 9 if (keyPressed) { 10 y = reset; 11 shot = 1; 12 } 13 }

とした方がよさそうな気がします。キー押しっぱなしの時にどういう動作を期待するかによりますが。

さて。
どうしても配列が必要か、といわれると無理やりたくさんの変数を設けて処理することは不可能ではないです。しかし、配列を使うのが素直な解決法だと思います。あるいは、ArrayListなど使えるようになっておくといろいろ楽かも知れません。

//擬似言語 if(キーが押されている && 前回の弾発射から一定時間以上経過 ){   if(存在する弾は制限数未満){ 新しい弾生成 } } for(弾単発 : 弾コレクション){ 弾を飛ばす処理 if(弾当たり){ 当たり処理 弾削除処理 } if(画面外){ 弾削除処理 } 弾描画 }

みたいな流れになるでしょうか。

投稿2019/08/21 12:24

thkana

総合スコア7639

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

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

0

仕様がよくわからないのですが
・何かキーが押されている時にdrawに入ったら弾を追加
・弾はdrawに入る度に一定ピクセル動く
という前提で書きます。

前提:弾の座標を覚える配列を用意します。それは座標と大きさ(x,y,w,h)を覚えています。(大きさ固定なら別に大きさは無くてもいいですけど。)

まず、keyPressedがtrueならば座標配列に新しい座標情報を追加します。
座標配列が空でないならば、座標一つ一つのy座標を書き換えたうえで描画します。
そのとき、範囲外に出た座標情報は削除します。

投稿2019/08/21 09:06

moredeep

総合スコア1507

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問