訳があって画像を貼ることは出来ないのですがmousePressedがマウスを押したときだけにしかTrueにならないのでlineを引いて右側からif(mousePressed)でlineのX座標を-方向に短くしたとしても、マウスボタンを離すとすぐに戻ってしまいます。mousePressedを使っている状態でも元に戻らずにそのままの状態にする方法はありますか?
ちなみにmousePressed==trueやboolean型の変数を試してみたりもしたのですが出来なかったです。
draw() {
mpos();
}
void mpos () {
int s;
s=100;
line(100,100,100+s,100);
if(mousePressed) {
s-=5;
}
}
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
そのプログラム、やっていることは以下のようになるはずです。是非「声に出して」読んでみてください。
- draw()関数を繰り返し実行します。draw()関数に入ると...
- mpos()関数を呼び出します。mpos()関数の中では
- 変数sを宣言しsに100を代入します
- 100,100 から 100+s,100に線を引きます。sは先程100を代入しているので常に100です。 結果、100,100から200,100に線が引かれます。
- もしマウスボタンが押されていたら、sから5を引きます。sは95になります。
- (sはローカル変数なので、値は捨てられて)mpos()関数を終了してdraw()に戻ります。
- draw()関数を終了します。
質問には、
マウスボタンを離すとすぐに戻ってしまいます
とありますが、このプログラムでは100,100から200,100以外の線は引かれないはずですが、短くなった線が実際に描画されているのですか? ならば、あなたが見ているソースコードと実行しているプログラムは別のもの、ということになります。とても重要なことなので確認してください。
元に戻らずにそのままの状態にする方法はありますか?
ローカル変数は関数が終わると寿命を終えてなくなってしまいます。関数を抜けても「そのまま」を保持するのならグローバル変数を使用して下さい。もちろん、なにか代入した途端にそれまでの値は失われますから、余計な代入はしてはいけません。
投稿2022/06/19 06:24
編集2022/06/19 06:24総合スコア7652
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
訳があって画像を貼ることは出来ないのですが
画像は貼らないでいいのでコードを提示してください。
もちろんすべてのコードを出す必要はなく、現象を説明できる(かつ実行できる)最低限のコードで十分です。
mousePressedがマウスを押したときだけにしかTrueにならない
mousePressed
はそういうものですからね^^;
mousePressed / Reference / Processing.org
boolean型の変数を試してみたりもしたのですが出来なかったです。
この方針でできると思うのですが、どううまくいかなかったですか?
Processing
1boolean b; 2 3void setup() { 4 size(400, 300); 5} 6 7void draw() { 8 background(255); 9 10 if (mousePressed) { // マウスが押されたらboolean型の変数をtrueに 11 b = true; 12 } 13 14 if (b) { // boolean型の変数の状態を見て長さを切り替える 15 line(0, 100, width/2, 100); 16 } else { 17 line(0, 100, width, 100); 18 } 19} 20 21//void mousePressed() { // こうでも同じ 22// b = true; 23//}
こういうこと?
Processing
1boolean select; // マウスが一度でも押されたらtrueになるboolean型のグローバル変数 2int g_cm = 100; // あるいは長さのほうをグローバル変数にするか 3 4void setup() { 5 size(700, 710); 6} 7 8void draw() { 9 background(255); 10 battle(); 11} 12 13void battle() { 14 int cm = 100; 15 if (select) { 16 cm -= 5; 17 } 18 19 if (mousePressed) { 20 if (mouseButton == LEFT) { 21 if (mouseX > 25 && mouseX < 345 && mouseY > 455 && mouseY < 570) { 22 select = true; 23 g_cm = 95; 24 } 25 } 26 } 27 28 rect(25, 455, 320, 115); 29 line(210, 240, 210 + cm, 240); 30 line(400, 140, 400 + g_cm, 140); 31}
投稿2022/06/19 06:15
編集2022/06/19 06:59総合スコア9363
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/19 06:30
2022/06/19 06:44
2022/06/19 06:59
2022/06/19 07:21
2022/06/19 07:23
2022/06/19 07:40 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。