えー、ゲーム開発自体は色々進んでるのですが、
今回の記事はちょこっとだけ。

ウチの子供にちょっと遊ばせたら、移動の仕方に苦戦していたので、
移動方向の補助線を表示させることにしました。

画面をなぞって線を描画

[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]

これで少しは操作しやすくなったかな?

ってことで、今日は短いですがこんなとこで。