我 11 岁,刚接触编程,我正在学校使用 javascript 为游戏制作一个简单的平台游戏。
现在我正在编写让 Angular 色跳跃的代码。它比 Angular 色上升然后下降更复杂,因为我希望 Action 流畅且看起来逼真。 Angular 色跳跃时快速离开地面,越往上走越慢,到达一定点后开始缓慢下落。它会在下落时加速(可能通过使用某种类型的加速度变量),然后撞到地面并完全停止。
我希望 Angular 色能够在空中左右移动,如果按住键,跳一次,然后当 Angular 色落地时,如果还按住键,再跳一次。 (游戏中的 Angular 色应该可以跳得很高)
我已经尝试这样做了,但是我遇到了一些可笑的错误。
这是我的(非常糟糕的)代码:
//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;
}
}
};
最佳答案
对于刚开始的人来说,这是相当令人印象深刻的。您似乎对几何有直观的理解。但是,由于您受过多少教育,您可能没有意识到一些领域知识。
在物理学中,描述运动的正确方程组是:
1. velocity = change_in_location / time
2. acceleration = change_in_velocity / time
您需要注意的另一件事是重力是加速度的一种形式。具体是9.8m/s/s的向下加速度
所以重写以上所有内容:
new_location = (velocity * time) + old_location
new_velocity = (acceleration * time) + old_velocity
如果您假设一个恒定时间的动画循环,您可以假设 time
= 1。这样可以将其简化为:
new_location = velocity + old_location
new_velocity = acceleration + old_velocity
这足以模拟重力。由于重力只是一种加速度:
gravity = SOME_NUMBER; // tune this to get the gravity you want
kingYPos = kingYPos + kingYVelocity;
kingYVelocity = kingYVelocity + gravity;
要跳跃,只需给物体一个瞬间的速度提升:
// jump:
kingYVelocity = -SOME_OTHER_NUMBER; // negative because "up"
注意:领域知识是编程之外的知识,程序员必须了解这些知识才能解决特定问题。例如,编写会计软件的程序员应该具有一定的会计知识。实际上,并非行业中的所有程序员都努力获取领域知识,因为有时会有系统分析师/顾问编写软件需求。但是,当您编写自己的软件时,您别无选择,只能获取一些领域知识。
关于javascript - 在javascript中跳转代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38194362/