えー、ゲーム開発自体は色々進んでるのですが、
今回の記事はちょこっとだけ。
ウチの子供にちょっと遊ばせたら、移動の仕方に苦戦していたので、
移動方向の補助線を表示させることにしました。
画面をなぞって線を描画
[java]
MainScene.java
private float downX = 0;
private float downY = 0;
private Font font;
public void init() {
・
・
省略
・
・
this.setOnSceneTouchListener(new IOnSceneTouchListener() {
@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_DOWN) {
downX = pSceneTouchEvent.getX();
downY = pSceneTouchEvent.getY();
}
if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_MOVE) {
float[] firstXY = {downX, downY};
float[] secondXY = {pSceneTouchEvent.getX(), pSceneTouchEvent.getY()};
float[] startXY = {0, 0};
float[] endXY = {secondXY[0] – firstXY[0], secondXY[1] – firstXY[1]};
if (endXY[0] > 150) {
endXY[0] = 150;
}
if (endXY[0] < -150) {
endXY[0] = -150;
}
if (endXY[1] > 150) {
endXY[1] = 150;
}
if (endXY[1] < -150) {
endXY[1] = -150;
}
double angle = getAngleByTwoPosition(firstXY, secondXY);
// 移動距離と角度からx方向、y方向の移動量を求める
double distance = getDistanceTwoPosition(startXY, endXY) * 0.02f;
float x = -(float) (distance * Math
.cos(angle * Math.PI / 180.0));
float y = -(float) (distance * Math
.sin(angle * Math.PI / 180.0));
System.out.println("moveX:" + x);
System.out.println("moveY:" + y);
movePlayer(x, y);
// 矢印削除 ※1
if (null != line) {
line.detachSelf();
}
// 矢印表示
line = new Line(firstXY[0], firstXY[1], secondXY[0], secondXY[1], 10, vertexBufferObjectManager);
line.setColor(convertRGB(80), convertRGB(160), convertRGB(220));
line.setAlpha(convertRGB(200));
attachChild(line);
}
if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_UP) {
stopPlayer(0, 0);
// 矢印削除 ※2
if (null != line) {
line.detachSelf();
}
}
return true;
}
});
}
[/java]
※1.画面タッチ時の座標、タッチして移動した後の座標から線を描画
lineが既に描画されていたら、一度消してラインを描画する。
開始、移動座標を指定してLineを生成する。
[java]
// 矢印削除 ※1
if (null != line) {
line.detachSelf();
}
// 矢印表示
line = new Line(firstXY[0], firstXY[1], secondXY[0], secondXY[1], 10, vertexBufferObjectManager);
line.setColor(convertRGB(80), convertRGB(160), convertRGB(220));
line.setAlpha(convertRGB(200));
attachChild(line);
[/java]
※2.画面の手をはなしたら線を削除
[java]
if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_UP) {
stopPlayer(0, 0);
// 矢印削除 ※2
if (null != line) {
line.detachSelf();
}
}
[/java]
これで少しは操作しやすくなったかな?
ってことで、今日は短いですがこんなとこで。