0

私は SuperCollider で MouseDown を使用したいと思っています。mouseDownAction だけが実際に何かで動作するのですか? 画面上の任意の場所をクリックして、マウス座標をポストウィンドウなどに出力できるようにしたい:

Server.default=s=Server.local;
s.boot;
s.mouseDownAction = { x = {|t_poll=0| var x_val, y_val;
    x_val = {MouseX.kr};
    y_val = {MouseY.kr};
    Poll.kr(t_poll, [x_val, y_val], ["x_val", "y_val"]);

}.play };
s.mouseUpAction = { x.set(\t_poll,1) };

もちろん、これは機能しません。これは、mouseDownAction が「View」クラスのプロパティとして予約されているように見えるためです。つまり、特定のウィンドウ内をクリックするだけです。

w = Window.new("Mouse Coordinates", Rect(1300,600,50,50));
b = Button.new(w,Rect(10,10,40,25)).states_([["off"],["on"]]);
b.mouseDownAction = { x = {|t_poll=0| var x_val, y_val;
    x_val = {MouseX.kr};
    y_val = {MouseY.kr};
    Poll.kr(t_poll, [x_val, y_val], ["x_val", "y_val"]);
}.play };
b.mouseUpAction = { x.set(\t_poll,1) };
w.front;

私が知りたいいくつかのこと:

  1. 最初のスニペットを実際に機能するように変更できますか?
  2. 画面上の任意の場所をクリックしたときにこれらの座標を取得するために MouseDown を機能させる方法はありますか?
  3. マウス座標を「取得」する方法を見つけるにはどうすればよいですか (どの関数を呼び出すか [既に「output」、「postln」、&.c を試しました])。

ありがとう!!!

4

1 に答える 1

0

マウス ボタンの Ugen がありますhttps://doc.sccode.org/Classes/MouseButton.html

これは、リンクされたヘルプファイルの例です:

(
SynthDef( \mousexyb, { |out=0|
    var mousex, mousey, mousebutton;
    mousex = MouseX.kr( 500, 1000 ); // this will determine the frequency of the sound (minimum value, maximum value, warp, lag)
    mousey = MouseY.kr( 0, 0.3 ); // this will determine the amplitude of the sound
    mousebutton = MouseButton.kr( 0, 1, 2 ); // this will turn the sound on or off (minimum value, maximum value, lag)
    Out.ar( out, SinOsc.ar( mousex, 0, mousey ) * mousebutton );
}).add
)

できることは、ボタンが押されたときにサーバーに OSC メッセージを生成させ、言語にそれをリッスンさせることです。

于 2020-12-29T17:16:40.237 に答える