スマホやタブレットでのフリック操作を認識し、ボールを指でフリックして動かしたい。ProcessingはmouseX, mouseYでマウス座標を取れ、また、pmouseX, pmouseYで前の(previous)座標を取れるみたい。それから、マウスクリック(タップ)開始、終了のイベントハンドラがそれぞれmousePressed, mouseReleasedと定義されてるので実装してみた。スマホとタブレットで確認したけど、感覚的でない。。
確認コード:fling.html
メモ
- フリック≠スワイプみたい。違いは速さだけ?フリックは素早く(払う操作)て、スワイプはゆっくり(なぞる操作)なイメージ。
- 底面以外の境界との衝突は、反発係数を考慮していない。
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Processing: parabolic motion</title>
</head>
<body>
<canvas id="mycanvas"></canvas><br />
<script src="processing-1.4.1.min.js" type="text/javascript"></script>
<script type="application/processing" data-processing-target="mycanvas">
float vx, vy;
float x, y;
float g = 9.8;
float t = 0.2;
float e = -0.8;
float r = 80.0; // ball radius
boolean targetPressed = false;
void setup() {
size(640, 480);
background(#000000);
fill(#FFFFFF);
noLoop();
x = r;
y = height - r;
ellipse(x, y, r*2, r*2);
}
void draw() {
background(#000000);
x = x + vx;
vy = vy + g * t;
y = y + vy * t + 0.5 * g * t * t;
if (y + r > height) {
y = height - r;
vy = vy * e;
}
else if (y < r) {
y = r;
}
if (x > width-r) {
x = width - r;
}
else if (x < r) {
x = r;
}
ellipse(x, y, r*2, r*2);
}
void mousePressed() {
targetPressed = false;
if (x-r <= mouseX && mouseX <= x+r) {
if (y-r <= mouseY && mouseY <= y+r) {
targetPressed = true;
}
}
}
void mouseReleased() {
if (targetPressed) {
vx = mouseX - pmouseX;
vy = mouseY - pmouseY;
loop();
}
}
</script>
</body>
</html>
参考サイト
- 日経ソフトウエア 別冊 – ゲームプログラミング入門:ITpro
訂正・補足、サンプルコードのダウンロード
ゲームプログラミング入門 (日経BPパソコンベストムック)
posted with amazlet at 12.11.08
日経BP社 (2012-10-22)
売り上げランキング: 23469
売り上げランキング: 23469
関連エントリー
