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

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

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

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

Processing

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

Q&A

解決済

1回答

590閲覧

6個の球をよけるゲームを作りたい

AzukiV

総合スコア15

Java

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

Processing

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

0グッド

0クリップ

投稿2018/06/04 14:45

編集2018/06/05 00:52

ネットや教科書を参考にして作ってみたのですが、まったく違ったプログラムができあがってしまいました。

ゲームの内容は6つの球をよけるというものです。しかし、できたのはペイントのようなものでした。
自信があったために、どこが間違っているのかわかりません。

enball[] ball = new enball[6]; //敵ボールを設定 int i = 0; //forに使う int j = 0; //同上 float[] enballx = new float[6]; //敵ボールx座標 float[] enbally = new float[6]; //敵ボールy座標 int flg = 0; int M6 = 0; //ボールが6で1 void setup(){ frameRate(60); size(600,600); for(i = 0; i<6; i=i+1){ ball[i] = new enball(80,80,80,80); //敵ボールを作った frameRate(60);}} void draw(){ for (i = 0; i<6; i=i+1){ hitme(); //自機に当たった ball[i].latest(); //最新の状態にする ball[i].hitwall(); //画面端にヒット ball[i].play(); }//動き ellipse(mouseX,mouseY,10,10);} //class //敵ボールについて class enball{ PVector posi; //位置設定 PVector sp; //速度設定 enball(float X, float Y, float spX, float spY){ posi = new PVector(X,Y); //位置のを作った sp = new PVector(spX,spY); //速度のを作った } void latest(){ posi.add(sp);} //速度add void hitwall(){ if((posi.x > width) || (posi.x < 0)){ sp.x = -sp.x;} if((posi.y > height) || (posi.y < 0)){ sp.y = -sp.y;}} void play(){ stroke(0,0,255); fill(0,0,255); ellipse(posi.x+5,posi.y+5,12,12); enballx[i] = posi.x; enbally[i] = posi.y;} //速度と位置をセットする void set(float X,float Y,float spX,float spY){ posi.set(X,Y); sp.set(spX,spY);}} //関数 void hitme(){ if(M6 ==1 && mouseX + 10 > enballx[i] && mouseX - 10 < enbally[i] && mouseY - 10 <enbally[i] || flg ==1){ fill(0); textSize(50); textAlign(CENTER,CENTER); text("ドンマイ!",300,300); noLoop(); }} void keyPressed(){ if(key =='A' || key == 'a'){ flg = 0; loop();}} void mousePressed() { ball[j].set(mouseX + 10, mouseY + 10, random(-10, 10), random(-10, 10)); j++; if (j == 6) { // ボールを20個つくる j = 0; M6 = 1; // ボールが最大となった } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

複数の問題がありそうですが、多分一番気にしておられる点だけコメントします。

問題は「ボールを移動させるアニメーション」が期待だったのに「ボールの軌跡が点々と塗りつぶされる」結果になってしまったことだと思います。原因はdrawの働きを勘違いしておられることでしょうね。

(A) drawメソッドはフレーム単位で繰り返し呼び出される(本コードでは1秒に60回程度)
(B) しかし「前のフレームで描画したものを自動的に消す」なんてことはしてくれない

質問者さんは(A)は分かっておいでのようですが(B)が把握できていないのだと思います。アニメーションをしたいなら「前のフレームで描画した内容を自分で消さなければならない」ことに注意してください。

対処:
とりあえずの対処としては「drawメソッドの先頭でスケッチの画面全体を一旦全て消す」のが簡単だと思います。

java

1... 2void draw() { 3 fill(255); // 追加 4 rect(0, 0, width, height); // 追加 5 ... 6} 7...

ちなみにご質問のコードは質問者さんが動かしたときのものではないと思います。なぜなら文法エラーになるからです。以下の変数宣言が抜けているようです。

enball[] ball = new enball[6];

コードを提示する際には「ご自分が動かしたそのまんまの最新のコード」を示すようご注意ください。さもないと閲覧者が再現する際に余計な手間がかかります。

投稿2018/06/04 16:19

KSwordOfHaste

総合スコア18392

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

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

AzukiV

2018/06/05 00:54

ありがとうございます。 質問する際に入力を失敗してしまい、消えていました。申し訳ございません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問