?? block.java
字號:
import javax.microedition.lcdui.Canvas;
import javax.microedition.m3g.Loader;
import javax.microedition.m3g.Node;
import javax.microedition.m3g.Object3D;
import javax.microedition.m3g.Transform;
import javax.microedition.m3g.World;
public class Block {
private Node gBlock;
private Node block0, block1, block2;
private final int BLOCK_ID = 31;
private final int MOVE_INCR = 1;
private World world;
// private boolean upPressed = false;
//
// private boolean downPressed = false;
//
// private boolean leftPressed = false;
//
// private boolean rightPressed = false;
private final int UP = 1 << 1;
private final int DOWN = 1 << 2;
private final int LEFT = 1 << 3;
private final int RIGHT = 1 << 4;
private boolean keyPressed = false;
private int keyState;
private boolean isModify = false;
private int state = 0;
private float[] position = new float[2];
private final int X = 0;
private final int Z = 1;
private Transform trans = new Transform();
private Transform trans0 = new Transform();
private Transform trans1 = new Transform();
private Transform trans2 = new Transform();
public Block() {
load();
}
public Node getBlock() {
// switch(state){
// case 0: gBlock = block0;break;
// case 1: gBlock = block1;break;
// case 2: gBlock = block2;break;
// }
return gBlock;
}
public void load() {
try {
Object3D[] list = Loader.load("/gogo.m3g");
for (int i = 0; i < list.length; i++) {
if (list[i] instanceof World) {
world = (World) list[i];
break;
}
}
gBlock = (Node) world.find(31);
world.removeChild(gBlock);
gBlock.setScale(1.5f, 1.5f, 1.5f);
block0 = (Node)gBlock.duplicate();
block1 = (Node)gBlock.duplicate();
block2 = (Node)gBlock.duplicate();
block0.getTransform(trans);
trans.postRotate(-90, 1, 0, 0);
block0.setTransform(trans);
position[X] = 1;
position[Z] = 1;
block0.translate(position[X]-0, -(-1), position[Z]-1);
block1.getTransform(trans);
trans.postRotate(90, 0, 1, 0);
block1.setTransform(trans);
block0.getTransform(trans0);
gBlock.setTransform(trans0);
gBlock.translate(position[X]-0, -(-1), position[Z]-1);
} catch (Exception e) {
e.printStackTrace();
}
}
public void pressedKey(int keyCode) {
keyPressed = true;
switch (keyCode) {
case Canvas.KEY_NUM2:
keyState = UP;
break;
case Canvas.KEY_NUM8:
keyState = DOWN;
break;
case Canvas.KEY_NUM4:
keyState = LEFT;
break;
case Canvas.KEY_NUM6:
keyState = RIGHT;
break;
default:
break;
}
} // end of pressedKey()
public void releasedKey(int keyCode) {
updateMove();
// updateState(keyCode);
System.out.println("state:"+ state);
// System.out.println("isModify:" + isModify);
keyPressed = false;
} // end of releasedKey()
public void updateMove() {
if (keyPressed) {
switch (state) {
case 0:
switch (keyState) {
case UP:
// gBlock.getTransform(trans);
// trans.postTranslate(0, 0, -1);
// trans.postRotate(-90, 1, 0, 0);
// gBlock.setTransform(trans);
// gBlock.translate(0, 0, -2);
// gBlock.preRotate(-90, 1, 0, 0);
// gBlock.translate(0, 0, -2);
// gBlock.setTransform(trans1);
block2.setTranslation(0, 0, 0);
position[Z] -= 2;
block2.translate(position[X]-0, 0, position[Z]-1);
block2.getTransform(trans2);
gBlock.setTransform(trans2);
gBlock.setTranslation(0, 0, 0);
gBlock.translate(position[X]-0, 0, position[Z]-1);
// gBlock.preRotate(90, 0, 1, 0);
// gBlock.translate(-0.5f, 0f, -0.5f);
// gBlock.translate(position[X]-1, 0, position[Z]+1);
// gBlock.setTranslation(position[0], 0, position[1]);
state = 2;
break;
case DOWN:
// gBlock.getTransform(trans);
// trans.postRotate(90, 1, 0, 0);
// gBlock.setTransform(trans);
// gBlock.preRotate(-90, 1, 0, 0);
// gBlock.translate(0, 0, 1);
// block2.setTransform(trans1);
block2.setTranslation(0, 0, 0);
position[Z] += 1;
block2.translate(position[X]-0, 0, position[Z]-1);
block2.getTransform(trans2);
gBlock.setTransform(trans2);
gBlock.setTranslation(0, 0, 0);
gBlock.translate(position[X]-0, 0, position[Z]-1);
state = 2;
break;
case LEFT:
// gBlock.setTranslation(0, 0, 0);
// gBlock.getTransform(trans);
// trans.postRotate(-90, 1, 0, 0);
// gBlock.setTransform(trans);
// gBlock.preRotate(-90, 0, 0, 1);
// gBlock.translate(-1.5f, -0.5f, 0);
// block1.setTransform(trans1);
block1.setTranslation(0, 0, 0);
// gBlock.postRotate(90, 0, 1, 0);
position[X] -= 2;
block1.translate(position[X]-(-0.5f), 0, position[Z]-1.5f);
block1.getTransform(trans1);
gBlock.setTransform(trans1);
gBlock.setTranslation(0, 0, 0);
gBlock.translate(position[X]-(-0.5f), 0, position[Z]-1.5f);
state = 1;
break;
case RIGHT:
// gBlock.getTransform(trans);
// trans.postRotate(180, 0, 0, 1);
// gBlock.setTransform(trans);
// gBlock.preRotate(-90, 0, 0, 1);
// gBlock.translate(1.5f, -0.5f, 0);
// gBlock.setTransform(trans1);
block1.setTranslation(0, 0, 0);
// gBlock.postRotate(90, 0, 1, 0);
position[X] += 1;
block1.translate(position[X]-(-0.5f), 0, position[Z]-1.5f);
block1.getTransform(trans1);
gBlock.setTransform(trans1);
gBlock.setTranslation(0, 0, 0);
gBlock.translate(position[X]-(-0.5f), 0, position[Z]-1.5f);
state = 1;
// isModify = true;
break;
}
break;
case 1:
switch (keyState) {
case UP:
// gBlock.setTransform(trans1);
block1.setTranslation(0, 0, 0);
// gBlock.postRotate(90, 0, 1, 0);
position[Z] -= 1;
block1.translate(position[X]-(-0.5f), 0, position[Z]-1.5f);
block1.getTransform(trans1);
gBlock.setTransform(trans1);
gBlock.setTranslation(0, 0, 0);
gBlock.translate(position[X]-(-0.5f), 0, position[Z]-1.5f);
// gBlock.preRotate(-90, 10f, 1, 0);
// if (isModify) {
// gBlock.translate(0, 0.5f, -0.5f);
// isModify = false;
// }
state = 1;
// isModify = false;
break;
case DOWN:
// gBlock.setTransform(trans1);
block1.setTranslation(0, 0, 0);
// gBlock.postRotate(90, 0, 1, 0);
position[Z] += 1;
block1.translate(position[X]-(-0.5f), 0, position[Z]-1.5f);
block1.getTransform(trans1);
gBlock.setTransform(trans1);
gBlock.setTranslation(0, 0, 0);
gBlock.translate(position[X]-(-0.5f), 0, position[Z]-1.5f);
state = 1;
break;
case LEFT:
// gBlock.setTransform(trans1);
block0.setTranslation(0, 0, 0);
// gBlock.postRotate(90, 1, 0, 0);
// gBlock.postRotate(90, arg1, arg2, arg3)
position[X] -= 1;
block0.translate(position[X]-0, -(-1), position[Z]-1);
block0.getTransform(trans0);
gBlock.setTransform(trans0);
gBlock.setTranslation(0, 0, 0);
gBlock.translate(position[X]-0, -(-1), position[Z]-1);
state = 0;
break;
case RIGHT:
block0.setTranslation(0, 0, 0);
position[X] += 2;
block0.translate(position[X]-0, -(-1), position[Z]-1);
block0.getTransform(trans0);
gBlock.setTransform(trans0);
gBlock.setTranslation(0, 0, 0);
gBlock.translate(position[X]-0, -(-1), position[Z]-1);
state = 0;
break;
}
break;
case 2:
switch (keyState) {
case UP:
block0.setTranslation(0, 0, 0);
position[Z] -= 1;
block0.translate(position[X]-0, -(-1), position[Z]-1);
block0.getTransform(trans0);
gBlock.setTransform(trans0);
gBlock.setTranslation(0, 0, 0);
gBlock.translate(position[X]-0, -(-1), position[Z]-1);
state = 0;
break;
case DOWN:
block0.setTranslation(0, 0, 0);
position[Z] += 2;
block0.translate(position[X]-0, -(-1), position[Z]-1);
block0.getTransform(trans0);
gBlock.setTransform(trans0);
gBlock.setTranslation(0, 0, 0);
gBlock.translate(position[X]-0, -(-1), position[Z]-1);
state = 0;
break;
case LEFT:
block2.setTranslation(0, 0, 0);
position[X] -= 1;
block2.translate(position[X]-0, 0, position[Z]-1);
block2.getTransform(trans2);
gBlock.setTransform(trans2);
gBlock.setTranslation(0, 0, 0);
gBlock.translate(position[X]-0, 0, position[Z]-1);
state = 2;
break;
case RIGHT:
block2.setTranslation(0, 0, 0);
position[X] += 1;
block2.translate(position[X]-0, 0, position[Z]-1);
block2.getTransform(trans2);
gBlock.setTransform(trans2);
gBlock.setTranslation(0, 0, 0);
gBlock.translate(position[X]-0, 0, position[Z]-1);
state = 2;
break;
}
break;
}
}
// gBlock.setScale(1f, 1f, 1f);
// gBlock.getTransform(trans);
// if (upPressed) { // move forward
// // trans.postTranslate(0, 0, -MOVE_INCR);
// // trans.t(0, 0, -MOVE_INCR);
// gBlock.translate(0, 0, -MOVE_INCR);
//
// } else if (downPressed) // move backwards
// // trans.postTranslate(0, 0, MOVE_INCR);
// gBlock.translate(0, 0, MOVE_INCR);
// else if (leftPressed) // move to the left
// // trans.postTranslate(-MOVE_INCR, 0, 0);
// gBlock.translate(-MOVE_INCR, 0, 0);
// else if (rightPressed) // move to the right
// // trans.postTranslate(MOVE_INCR, 0, 0);
// gBlock.translate(MOVE_INCR, 0, 0);
// gBlock.setTransform(trans);
// gBlock.setScale(1.5f, 1.5f, 1.5f);
keyState = 0;
keyPressed = false;
} // end of updateMove()
public boolean checkImpact(){
boolean isImpact = false;
boolean isIn = false;
boolean isIn1 = false;
boolean isIn2 = false;
int num = Map.maps.length/2;
switch(state){
case 0:
for(int i = 1; i <= num; i++){
float x = Map.maps[i*2-1];
float z = Map.maps[i*2-2];
if(x==position[X]&&z==position[Z])
isIn = true;
}
isImpact = !isIn;
break;
case 1:
for(int i = 1; i <= num; i++){
float x = Map.maps[i*2-1];
float z = Map.maps[i*2-2];
if(x==position[X]&&z==position[Z])
isIn1 = true;
}
for(int i = 1; i <= num; i++){
float x = Map.maps[i*2-1];
float z = Map.maps[i*2-2];
if(x==position[X]+2&&z==position[Z])
isIn2 = true;
}
isIn = isIn1 && isIn2;
isImpact = !isIn;
break;
case 2:
for(int i = 1; i <= num; i++){
float x = Map.maps[i*2-1];
float z = Map.maps[i*2-2];
if(x==position[X]&&z==position[Z])
isIn1 = true;
}
for(int i = 1; i <= num; i++){
float x = Map.maps[i*2-1];
float z = Map.maps[i*2-2];
if(x==position[X]&&z==position[Z]+2)
isIn2 = true;
}
isIn = isIn1 && isIn2;
isImpact = !isIn;
break;
}
return isImpact;
}
// private void updateState(int keyCode) {
// switch (state) {
// case 0:
// switch (keyCode) {
// case Canvas.KEY_NUM2:
// case Canvas.KEY_NUM8:
// state = 2;
// isModify = true;
// break;
// case Canvas.KEY_NUM4:
// case Canvas.KEY_NUM6:
// state = 1;
// isModify = true;
// break;
// }
// break;
// case 1:
// switch (keyCode) {
// case Canvas.KEY_NUM2:
// case Canvas.KEY_NUM8:
// state = 1;
// break;
// case Canvas.KEY_NUM4:
// case Canvas.KEY_NUM6:
// state = 0;
// isModify = true;
// break;
// }
// break;
// case 2:
// switch (keyCode) {
// case Canvas.KEY_NUM2:
// case Canvas.KEY_NUM8:
// state = 0;
// isModify = true;
// break;
// case Canvas.KEY_NUM4:
// case Canvas.KEY_NUM6:
// state = 2;
// break;
//
// }
// break;
// }
// }
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -