Prototyping Lab: Recipe 14.4
♥0 |
Line 48 |
Modified 2010-04-14 23:08:43 |
MIT License
archived:2017-03-20 11:35:45
ActionScript3 source code
/**
* Copyright kotobuki ( http://wonderfl.net/user/kotobuki )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/vxof
*/
package {
import flash.display.Sprite;
import flash.events.Event;
import funnel.*;
public class UseTouchPanel extends Sprite {
private var arduino:Arduino;
// タッチパネルのXとYに接続したピン、タッチされているか否かを示すピン
private var xPin:Pin;
private var yPin:Pin;
private var touchPin:Pin;
// 現在タッチされているか否か
private var isTouched:Boolean = false;
// 前回のXとY の値
private var lastX:Number = 0;
private var lastY:Number = 0;
public function UseTouchPanel() {
// Arduinoの初期化
arduino = new Arduino(Arduino.FIRMATA);
// タッチパネルのXとYに接続したピンにスケーラをセット
xPin = arduino.analogPin(0);
xPin.addFilter(new Scaler(0, 1, 0, 399));
yPin = arduino.analogPin(1);
yPin.addFilter(new Scaler(0, 1, 0, 299));
// タッチされているか否かを示すピンにフィルタリスナをセット
touchPin = arduino.analogPin(2);
touchPin.addFilter(new SetPoint([0.5, 0.1]));
touchPin.addEventListener(PinEvent.RISING_EDGE,
onMake);
touchPin.addEventListener(PinEvent.FALLING_EDGE,
onBreak);
// 毎フレームごとに発生するイベントに対するリスナをセット
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
// パネルに触れたら
private function onMake(e:PinEvent):void {
// フラグをtrueにセットし、それまでの描画をクリアして新しくスタート
isTouched = true;
graphics.clear();
graphics.lineStyle(1, 0x000000);
graphics.moveTo(xPin.value, yPin.value);
}
// パネルから離れたら
private function onBreak(e:PinEvent):void {
// フラグをfalseにセット
isTouched = false;
}
// 毎フレームごとに以下を実行
private function onEnterFrame(e:Event):void {
// もしパネルに触れていたらxとy の値を読み取る
if (isTouched) {
var x:Number = xPin.value;
var y:Number = yPin.value;
// xまたはy の値が前回と異なっていたら新しい点まで直線を描画する
if (lastX != x || lastY != y) {
graphics.lineTo(x, y);
}
// 前回のxとy の値として今回の値をセット
lastX = x;
lastY = y;
}
}
}
}