我是十一岁的新手编程,我正在使用javascript为我的学校制作一个简单的平台游戏。
现在我正在研究使角色跳跃的代码。它比上下然后下降的角色更复杂,因为我希望这些动作流畅而且看起来很逼真。当角色跳跃时,它会快速离开地面,然后随着它变高而减速,当它到达某一点时,它将开始缓慢下降。它会在下降时加速(可能是通过使用某种类型的加速度变量),然后撞到地面并完全停止。
我希望角色能够在空中左右移动,如果按住键,则跳跃一次,然后当角色击中地面时,如果仍然按住该键,则再次跳跃。 (游戏中的角色应该能够跳得很高)
我已经尝试过这样做,但我发生了一些搞笑的错误。
这是我(非常破碎)的代码:
//movement (x)
var maxSpeed = 12.5;
var xForce = 0;
var kingXPos = 0;
//movement (y)
var yForce = 0;
var kingYPos = 202;
//LV design
var floorHeight = 150;
var draw = function() {
//background and basics
background(255, 0, 0);
image(getImage("creatures/Winston"), kingXPos, kingYPos, 50, 50);
//level features (only the floor right now)
fill(0, 0, 0);
rect(0, 250, 400, floorHeight);
//right movement
if (keyIsPressed && keyCode === RIGHT) {
kingXPos = kingXPos + xForce;
xForce = xForce + 0.25;
if (xForce >= maxSpeed && keyIsPressed) {
xForce = maxSpeed;
}
}
//left movement
if (keyIsPressed && keyCode === LEFT) {
kingXPos = kingXPos + xForce;
xForce = xForce - 0.25;
if (xForce <= -maxSpeed && keyIsPressed) {
xForce = -maxSpeed;
}
}
//jump (not yet functional)
if (keyTyped && keyCode === UP && kingYPos === floorHeight + 50) {
kingYPos = kingYPos + yForce;
yForce = yForce - 0.5;
}
//other physics
if (!keyIsPressed) {
kingXPos = kingXPos + xForce;
if (xForce > 0) {
xForce = xForce - 0.25;
}
else if (xForce < 0) {
xForce = xForce + 0.25;
}
}
};
答案 0 :(得分:3)
对于刚开始的人来说,这是相当令人印象深刻的。您似乎对几何有直观的理解。但是,由于您的教育程度,您可能不会注意到一些领域知识。
在物理学中,描述运动的正确方程组是:
1. speed = change_in_location / time
2. acceleration = change_in_speed / time
注意:我在这里使用“速度”这个词,因为它的类型比“速度”短。正确的词在技术上是“速度”。物理速度意味着与速度略有不同。
您需要注意的另一件事是重力是一种加速形式。具体而言,它是向下加速度9.8m / s / s
所以改写以上所有内容:
new_location = (speed * time) + old_location
new_speed = (acceleration * time) + old_speed
如果你假设一个恒定时间动画循环,你可以假设time
= 1.这样就简化为:
new_location = speed + old_location
new_speed = acceleration + old_speed
这足以模拟重力。因为引力只是一种加速度:
gravity = SOME_NUMBER; // tune this to get the gravity you want
kingYPos = kingYPos + kingYSpeed;
kingYSpeed = kingYSpeed + gravity;
跳跃只是让物体瞬间提升速度:
// jump:
kingYSpeed = -SOME_OTHER_NUMBER; // negative because "up"
注意:领域知识是编程人员必须了解的编程之外的知识才能解决特定问题。例如,编写会计软件的程序员应具备一定的会计知识。实际上,并非所有业内程序员都努力获取领域知识,因为有时会有系统分析师/顾问编写软件需求。但是当你编写自己的软件时,你别无选择,只能获得一些领域知识。