⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 monstersprite.java

📁 孤单惊魂
💻 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 + -