?? monstersprite.java
字號:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.*;
public class MonsterSprite
extends Sprite {
private Random rand;
private int speed;
private int speed3;
private TiledLayer barrier;
private Sprite actor;
private int aggression; // 0 - 10
public MonsterSprite(Image image, int frameWidth, int frameHeight,
int monsterSpeed,
TiledLayer barrierLayer, Sprite actorSprite,
int aggressionLevel) {
super(image, frameWidth, frameHeight);
rand = new Random(); // 初始化隨機數
speed = monsterSpeed; //設置速度
speed3 = 3 * speed;
barrier = barrierLayer; // 設置圖層障礙
actor = actorSprite; // 設置被追逐者
aggression = aggressionLevel; // 設置攻擊級別
}
public void update() {
int xPos = getX();
int yPos = getY(); // 臨時保存位置
// 根據攻擊性追逐或隨機移動
if (Math.abs(rand.nextInt() % (aggression + 1)) > 0) { // 追逐
if (getX() > (actor.getX() + actor.getWidth() / 2)) {
move( -speed, 0); //左
if (barrier != null && collidesWith(barrier, true)) { // 檢測與障礙物之間的沖突
move(speed3, 0); //左
}
}
else if ( (getX() + getWidth() / 2) < actor.getX()) {
move(speed, 0); //右
if (barrier != null && collidesWith(barrier, true)) { // 檢測與障礙物之間的沖突
move( -speed3, 0); //左
}
}
if (getY() > (actor.getY() + actor.getHeight() / 2)) {
move(0, -speed); //上
if (barrier != null && collidesWith(barrier,true)) { // 檢測與障礙物之間的沖突
move(0, speed3); //左
}
}
else if ( (getY() + getHeight() / 2) < actor.getY()) {
move(0, speed); // 下
if (barrier != null && collidesWith(barrier, true)) { // 檢測與障礙物之間的沖突
move(0, -speed3); //左
}
}
}
else { // 隨機移動
switch (Math.abs(rand.nextInt() % 4)) {
case 0: // 左
move( -speed, 0);
break;
case 1: // 右
move(speed, 0);
break;
case 2: // 上
move(0, -speed);
break;
case 3: // 下
move(0, speed);
break;
}
if (barrier != null && collidesWith(barrier, true)) { // 檢測與障礙物之間的沖突
setPosition(xPos, yPos); // 回到初始位置
}
}
nextFrame();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -