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

p5.js中重力代码放置位置及实现方法求助(附现有代码)

给p5.js角色添加重力效果的实现方法

核心逻辑

要模拟重力,得利用p5.js的draw()循环逐帧更新角色的垂直位置:通过速度叠加重力加速度模拟下落的加速效果,同时添加地面碰撞检测,防止角色无限掉落。

修改后的完整代码

// 全局变量定义
let gameChar_x, gameChar_y;
let gravity;
let vy; // 垂直速度
let groundY; // 地面y坐标

function setup() {
  createCanvas(400, 200);
  // 初始化变量
  gameChar_x = 245;
  gameChar_y = 137;
  gravity = 0.5; // 重力加速度,数值越大下落越快
  vy = 0; // 初始垂直速度为0
  groundY = 137; // 角色站立的地面位置
}

function draw() {
  background(255); // 每一帧清空画布
  
  // 绘制题目提示框
  stroke(100);
  noFill();
  rect(220, 60, 50, 80);
  noStroke();
  fill(0);
  text("2. jumping facing forwards", 220, 160);
  
  // 重力逻辑处理
  vy += gravity; // 逐帧给垂直速度叠加重力
  gameChar_y += vy; // 根据垂直速度更新角色y坐标
  
  // 地面碰撞检测:碰到地面时重置位置和速度
  if (gameChar_y >= groundY) {
    gameChar_y = groundY;
    vy = 0;
  }
  
  // 绘制角色
  fill(255,102,179);
  rect(gameChar_x-10, gameChar_y-55, 20, 20);
  fill(153,77,0);
  ellipse(gameChar_x, gameChar_y-62, 20, 20);
  fill(255,255,255);
  ellipse(gameChar_x-5, gameChar_y-62, 5,5);
  fill(64,25,255);
  ellipse(gameChar_x, gameChar_y-62, 5,5);
}

// 可选:添加跳跃功能,按空格键触发
function keyPressed() {
  if (key === ' ' && gameChar_y === groundY) {
    vy = -10; // 向上的速度,负号表示向上,绝对值越大跳得越高
  }
}

关键部分说明

  • 全局变量:把角色位置、重力、速度、地面坐标放在全局,方便在setup()初始化和draw()循环中持续更新。
  • 重力模拟:vy += gravity让角色下落速度逐渐加快,符合现实中重力的加速特性;gameChar_y += vy让角色位置随速度动态变化。
  • 地面碰撞:当角色y坐标超过地面位置时,强制拉回地面并重置垂直速度,避免角色穿透地面或无限下落。
  • 跳跃功能:通过keyPressed()监听空格键,只有角色站在地面时才触发跳跃,给一个负的垂直速度实现向上跳跃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:55:20