You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:完善Processing 3D平台游戏核心功能

Processing 3D平台游戏功能完善实现

完整实现代码

// 玩家核心属性
float playerX = 0;
float playerY = 50;
float playerZ = 0;
float playerSize = 10;
float moveSpeed = 0.5f;
float jumpForce = 8;
float gravity = 0.2f;
float verticalVelocity = 0;
boolean isGrounded = false;
boolean gameOver = false;
boolean gameWin = false;

// 主平台属性
float stageX = 0;
float stageY = 0;
float stageZ = 0;
float stageSize = 50;
float stageMoveRange = 20;
float stageMoveSpeed = 0.02f;
float stageOffset = 0;

// 熔岩属性
float lavaY = -60;
float lavaSize = 200;

// 终点平台属性
float endStageX = 100;
float endStageY = 0;
float endStageZ = 0;
float endStageSize = 30;

void setup() {
  size(800, 600, P3D);
  camera(0, 100, 300, 0, 0, 0, 0, 1, 0);
}

void draw() {
  background(135, 206, 235);
  
  if (gameOver) {
    drawGameOver();
    return;
  }
  
  if (gameWin) {
    drawGameWin();
    return;
  }
  
  // 更新主平台Y轴位置(上下往复移动)
  stageOffset += stageMoveSpeed;
  stageY = sin(stageOffset) * stageMoveRange;
  
  // 处理重力与跳跃逻辑
  applyGravity();
  handleJump();
  
  // 处理WASD移动输入
  handlePlayerMovement();
  
  // 各类碰撞检测
  checkStageCollision();
  checkLavaCollision();
  checkEndStageCollision();
  
  // 绘制场景元素
  drawStage();
  drawLava();
  drawEndStage();
  drawPlayer();
}

// 应用重力效果
void applyGravity() {
  if (!isGrounded) {
    verticalVelocity -= gravity;
    playerY += verticalVelocity;
  }
}

// 处理跳跃输入(仅落地时可触发)
void handleJump() {
  if (keyPressed && key == ' ' && isGrounded) {
    verticalVelocity = jumpForce;
    isGrounded = false;
  }
}

// 处理WASD方向移动
void handlePlayerMovement() {
  if (keyPressed) {
    if (key == 'w' || key == 'W') playerZ -= moveSpeed;
    if (key == 's' || key == 'S') playerZ += moveSpeed;
    if (key == 'a' || key == 'A') playerX -= moveSpeed;
    if (key == 'd' || key == 'D') playerX += moveSpeed;
  }
}

// 检测玩家与主平台的碰撞(防止穿透)
void checkStageCollision() {
  boolean onStageArea = (playerX > stageX - stageSize/2 && playerX < stageX + stageSize/2) &&
                        (playerZ > stageZ - stageSize/2 && playerZ < stageZ + stageSize/2);
  
  if (onStageArea && playerY - playerSize/2 <= stageY + stageSize/2 && verticalVelocity < 0) {
    playerY = stageY + stageSize/2 + playerSize/2;
    verticalVelocity = 0;
    isGrounded = true;
  } else {
    isGrounded = false;
  }
}

// 检测玩家与熔岩的碰撞(触发失败)
void checkLavaCollision() {
  if (playerY - playerSize/2 <= lavaY + lavaSize/2) {
    gameOver = true;
  }
}

// 检测玩家到达终点平台(触发胜利)
void checkEndStageCollision() {
  boolean onEndStage = (playerX > endStageX - endStageSize/2 && playerX < endStageX + endStageSize/2) &&
                       (playerZ > endStageZ - endStageSize/2 && playerZ < endStageZ + endStageSize/2) &&
                       (playerY - playerSize/2 <= endStageY + endStageSize/2);
  
  if (onEndStage) {
    gameWin = true;
  }
}

// 绘制主平台
void drawStage() {
  pushMatrix();
  translate(stageX, stageY, stageZ);
  fill(101, 67, 33);
  box(stageSize);
  popMatrix();
}

// 绘制熔岩区域
void drawLava() {
  pushMatrix();
  translate(0, lavaY, 0);
  fill(255, 69, 0);
  box(lavaSize, 10, lavaSize);
  popMatrix();
}

// 绘制终点平台
void drawEndStage() {
  pushMatrix();
  translate(endStageX, endStageY, endStageZ);
  fill(0, 255, 0);
  box(endStageSize);
  popMatrix();
}

// 绘制玩家模型
void drawPlayer() {
  pushMatrix();
  translate(playerX, playerY, playerZ);
  fill(0, 0, 255);
  sphere(playerSize);
  popMatrix();
}

// 绘制失败界面
void drawGameOver() {
  background(0);
  fill(255, 0, 0);
  textAlign(CENTER, CENTER);
  textSize(50);
  text("You Lost", width/2, height/2);
}

// 绘制胜利界面
void drawGameWin() {
  background(0);
  fill(0, 255, 0);
  textAlign(CENTER, CENTER);
  textSize(50);
  text("You Win!!", width/2, height/2);
}

核心功能实现说明

  • 平台站立与防穿透:采用AABB轴对齐碰撞检测,判断玩家是否处于平台水平范围内,同时检测玩家底部与平台顶部的垂直位置关系,重置垂直速度并标记落地状态,避免穿透。
  • 熔岩触碰判定:检测玩家底部是否低于熔岩顶部,触发游戏结束并显示失败文本。
  • 终点判定:判断玩家是否完全处于终点平台的水平与垂直范围内,触发胜利并显示胜利文本。
  • 平台上下移动:利用sin()函数生成平滑的周期性位移,控制平台在设定范围内往复运动。
  • WASD移动与空格跳跃:通过keyPressed事件监听输入控制玩家XYZ轴移动;仅允许落地状态下触发跳跃,结合垂直速度模拟跳跃与重力的物理效果。

内容的提问来源于stack exchange,提问作者mehmed aras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:13:11