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

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

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

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

Q&A

2回答

670閲覧

背景のプログラムを追加したい

Manatan

総合スコア5

Processing

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

0グッド

0クリップ

投稿2019/12/01 06:20

前提・実現したいこと

Processingで作成したプログラムに背景を付けたいです。
背景用のプログラムは(背景は画像読み込み、雪を降らせている)完成しているのですが、どうやってくっつけたらいいかわかりません。

背景のプログラミング

PImage haikei; class Snowflake { //Snowflake Class float x; //x axis float y; //y axis float s; //size color c; //color float dy; //speed Snowflake() { //Function to create snowflakes x = random(width); //initial x point is random y = random(height); dy = random(0, 3); // Falling speed is random between 3 and 10 s = 5 * dy / 4.0; //Size is small if initial speed is slow c = #ffffff; //white snow } void drop() { //create snow and move y += dy; if (y > height) y = 0; //if snow gets the bottom of the screen, return to top noStroke(); //no outline fill(c); ellipse(x, y, s, s); } } Snowflake[] sf = new Snowflake[5000]; //prepare the area for 1000 snow object void setup(){ size (1025,555); noCursor(); for (int i = 0; i < 2000; i++) { //雪⽚オブジェクトを1000 個作る sf[i] = new Snowflake(); } haikei = loadImage("haikei2.png"); } void draw() { background(0); image(haikei,0,0); for(int i = 0; i < 2000; i++) { sf[i].drop(); } }

該当のソースコード

processing

1import org.gamecontrolplus.*; 2 3ControlIO control; 4ControlDevice device; 5ControlButton button4, button5, button6; 6ControlSlider[] sliders = new ControlSlider[2]; 7ControlHat hat; 8 9int angle = 30; // 座標の回転角度 10int margin = 40; // 座標の移動量 11int direction = 0; // 向き 12int imgX = 0; 13int imgY = 0; 14int size = 300; // 大きさ 15PImage comocomo; 16PImage haikei; 17 18void setup() { 19 control = ControlIO.getInstance(this); 20 21 // 名前を指定してデバイスを取得 22 device = control.getDevice("PC Game Controller "); 23 24 button4 = device.getButton(4); 25 //button4.plug(this, "pressButton4", ControlIO.ON_PRESS); // ボタン4を押すとpressButton4()関数を呼ぶ 26 button5 = device.getButton(5); 27 button5.plug(this, "pressButton5", ControlIO.ON_PRESS); // ボタン5を押すとpressButton5()関数を呼ぶ 28 button6 = device.getButton(6); 29 button6.plug(this, "pressButton6", ControlIO.ON_PRESS); // ボタン6を押すとpressButton6()関数を呼ぶ 30 hat = device.getHat(0); 31// hat.plug(this, "pressHat0", ControlIO.ON_PRESS); // 十字キーを押すとpressHat0()関数を呼ぶ 32 33 34 // 左アナログスティックのXY軸を取得 (現状はX軸のみ使用) 35 sliders[0] = device.getSlider(3); 36 sliders[1] = device.getSlider(4); 37 38 39 40 size(1025, 555); 41 colorMode(HSB, 100); 42 background(99); 43 frameRate(20); 44 45 comocomo = loadImage("hituji.png"); 46 imageMode(CENTER); 47 48 haikei = loadImage("haikei2.png"); 49} 50 51void draw() { 52 background(0); 53 image(haikei, 0, 0); 54 translate(width / 2, height / 2); 55 rotate(radians(angle * direction)); 56 image(comocomo, imgX, imgY, size, size); 57 comocomo.resize( 300, 300); 58 59 direction += (int)sliders[1].getValue(); // 左 = -1, 右 = 1, 入力無し = 0 60 if (direction < 0) direction = 11; 61 if (direction > 11) direction = 0; 62 println(direction); 63 64 if (hat.up()) imgY -= margin; 65 if (hat.down()) imgY += margin; 66 if (hat.left()) imgX -= margin; 67 if (hat.right()) imgX += margin; 68} 69 70 71void pressButton5() { 72 if (size > 20) size -= 5; 73} 74 75void pressButton6() { 76 if (size < 400) size += 5; 77}

試したこと

背景の方をvoid setup()とvoid draw()に分けて該当のソースコードにいれてみたのですが、エラーになってしまい…。
どのようにいれたらよいでしょうか?

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

今はPImage haikeiだが、上側のコードに置き換えたいって意味ですね?
単純にくっつけるとsetupdrawが2つになってエラーになってしまいますね。
方法はいろいろありそうですが、変更の手間が少なく見通しがいいようにクラスに分けましょう。

新規タブ(タブの右にある▼)でHaikeiと付けて新しいタブを作ります。(もっといい名前にしてください)

Processing

1class Haikei { 2 3// ここの間に上側のコード 4 5}

元のタブ(下のコードのほう)に戻って、

  • PImage haikei;Haikei haikei;に変える。
  • haikei = loadImage("haikei2.png");haikei = new Haikei(); haikei.setup();に変える。
  • image(haikei, 0, 0);haikei.draw();に変える。

Snowflakeと同じように、「背景を描くという処理をHaikeiクラスにしてもらう」といった感じです。
haikei.setup();が冗長なのでHaikeiクラスのコンストラクタにしてもいいですね。

投稿2019/12/01 12:34

TN8001

総合スコア9317

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

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

0

エラーになってしまい…。

そこで止めないで、なんというエラーが出ているのかを読んで、なぜエラーになったのかを考え、エラーにならないようにしてみたらどうでしょう。
その過程でわからないことがあるというのなら、それはそれで質問していただければよろしいかと思いますが。

うまくいかない時に「うまくいかない」あるいは「エラーになる」という大雑把な捉え方をしていたらまず解決しません。エラーならなんというメッセージが出ているのか、期待しない動作ならどのように動いているのか、何が起こっているのかを観察し、どうしてそうなるのか、うまくいくにはどうしたらいいのかを練り上げて行く、これが出来るようにならないと、うまくいかない毎に質問して答えを教えてもらわなきゃ解決できないということにもなりかねません。

投稿2019/12/01 07:05

thkana

総合スコア7637

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問