🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Processing

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

Q&A

解決済

1回答

1041閲覧

ゲームパッドの十字キーで画像を上下左右に動かしたい

Manatan

総合スコア5

Processing

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

1グッド

0クリップ

投稿2019/12/01 02:35

前提・実現したいこと

Processingとゲームパッドを使用して、表示させた画像を動かしたいです。
今できる操作に加えてゲームパッドの十字キーを押すと上下左右に動かせる仕様にしたいです。

発生している問題・エラーメッセージ

// ゲームパッドを用いた画像の回転・拡大・縮小 // 左アナログスティックの左右: 回転 // ボタン5 & 6: 拡大・縮小 // ハットスイッチ: 上下左右に動く import org.gamecontrolplus.*; ControlIO control; ControlDevice device; ControlButton button4, button5, button6; ControlSlider[] sliders = new ControlSlider[2]; ControlHat hat; int angle = 30; // 座標の回転角度 int margin = 40; // 座標の移動量 int direction = 0; // 向き int size = 300; // 大きさ PImage comocomo; void setup() { control = ControlIO.getInstance(this); // 名前を指定してデバイスを取得 device = control.getDevice("PC Game Controller "); button4 = device.getButton(4); //button4.plug(this, "pressButton4", ControlIO.ON_PRESS); // ボタン4を押すとpressButton4()関数を呼ぶ button5 = device.getButton(5); button5.plug(this, "pressButton5", ControlIO.ON_PRESS); // ボタン5を押すとpressButton5()関数を呼ぶ button6 = device.getButton(6); button6.plug(this, "pressButton6", ControlIO.ON_PRESS); // ボタン6を押すとpressButton6()関数を呼ぶ hat = device.getHat(0); // hat.plug(this, "pressHat0", ControlIO.ON_PRESS); // 十字キーを押すとpressHat0()関数を呼ぶ // 左アナログスティックのXY軸を取得 (現状はX軸のみ使用) sliders[0] = device.getSlider(3); sliders[1] = device.getSlider(4); size(500, 500); colorMode(HSB, 100); background(99); frameRate(20); comocomo = loadImage("hituji.png"); imageMode(CENTER); } void draw() { background(99); translate(width / 2, height / 2); rotate(radians(angle * direction)); image(comocomo, 0, 0, size, size); direction += (int)sliders[1].getValue(); // 左 = -1, 右 = 1, 入力無し = 0 if (direction < 0) direction = 11; if (direction > 11) direction = 0; println(direction); } void pressButton5() { if (size > 20) size -= 5; } void pressButton6() { if (size< 400) size += 5; } void pressHat0() { }

該当のソースコード

Processing

試したこと

十字キーの操作はHatで入力するのでHatを取得させてみました。
上が1、右が3、下が5、左が7のようにもうどの方向が押されたらこの数字と決まっているようです。
上下左右に動かすにはどのようにプログラミングすればいいのか分からず…
どなたか教えていただけませんか?

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

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

TN8001👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

まずは変数を用意して

Processing

1int size = 300; 2int imgX = 0; // X座標 3int imgY = 0; // Y座標 4PImage comocomo;

drawで値を増減します。

Processing

1void draw() { 2 background(99); 3 translate(width / 2, height / 2); 4 rotate(radians(angle * direction)); 5 image(comocomo, imgX, imgY, size, size); // 位置を指定 6 7 direction += (int)sliders[0].getValue(); 8 if (direction < 0) direction = 11; 9 if (direction > 11) direction = 0; 10 11 float s = sin(radians(angle * direction)); 12 float c = cos(radians(angle * direction)); 13 14 if (hat.up()) { 15 imgX -= s * margin; 16 imgY -= c * margin; 17 } 18 if (hat.down()) { 19 imgX += s * margin; 20 imgY += c * margin; 21 } 22 if (hat.left()) { 23 imgX -= c * margin; 24 imgY += s * margin; 25 } 26 if (hat.right()) { 27 imgX += c * margin; 28 imgY -= s * margin; 29 } 30}

こんな感じでいいんじゃないでしょうか。
イベント(pressHat0 releseHat0)で増減してもいいですが、十字キーを連打することになるので使いにくくなりそうです。

投稿2019/12/01 05:00

編集2019/12/01 07:50
TN8001

総合スコア9862

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

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

Manatan

2019/12/01 05:38

ありがとうございます! 出来ました!
TN8001

2019/12/01 07:53

questions/226636をやってて気が付いたのですが、直感的な操作でなかったですねw 数学は苦手なのでもっとスマートな書き方があるのかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問