- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我正在 HTML5 中制作一个小行星游戏,但我在Bullets[i].move 函数中被困在子弹的运动上。当我按空格键时,程序会绘制一颗子弹,但它只是跟随船,但从未离开船。您可以在调用函数时直接将数字输入到函数中,但是当我调用 speedX 和 SpeedY 的对象时,子弹根本不移动。是我使用的子弹的 x 和 y 位置导致了问题吗?我的代码:
function Bullet(x, y, sx, sy) {
this.x = x;
this.y = y;
this.sx = sx;
this.sy = sy;
this.r = 1;
this.show = function() {
ctx.fillStyle = "white";
ctx.beginPath();
ctx.arc(this.x, this.y, this.r, 0, Math.PI*2);
ctx.fill();
ctx.closePath();
};
this.move = function() {
this.x += this.sx;
this.y += this.sy;
};
this.wrap = function() {
if (this.x > width+this.r) {
this.x = -this.r;
} else if (this.x < -this.r) {
this.x = width+this.r;
}
if (this.y > height+this.r) {
this.y = -this.r;
} else if (this.y < -this.r) {
this.y = height+this.r;
}
};
}
for (var i = 0; i < bullets.length; i++) {
var b = bullets[i];
bullets[i] = new Bullet(b.x, b.y, b.speedX*10, b.speedY*10);
bullets[i].move();
bullets[i].wrap();
bullets[i].show();
}
if (spacePressed) {
bullets.push({x: player.pos.x, y: player.pos.y, speedX: Math.sin(player.heading), speedY: -Math.cos(player.heading)});
};
这是我的代码:
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var width = canvas.width;
var height = canvas.height;
var leftPressed = false;
var rightPressed = false;
var upPressed = false;
var spacePressed = false;
document.addEventListener("keydown", d);
document.addEventListener("keyup", u);
function d(e) {
if (e.keyCode == 37) {
leftPressed = true;
} else if (e.keyCode == 39) {
rightPressed = true;
}
if (e.keyCode == 38) {
upPressed = true;
}
if (e.keyCode == 32) {
spacePressed = true;
}
}
function u(e) {
if (e.keyCode == 37) {
leftPressed = false;
} else if (e.keyCode == 39) {
rightPressed = false;
}
if (e.keyCode == 38) {
upPressed = false;
}
if (e.keyCode == 32) {
spacePressed = false;
}
}
function Vector(x, y) {
this.x = x || 0;
this.y = y || 0;
}
function Bullet(x, y, sx, sy) {
this.x = x;
this.y = y;
this.sx = sx;
this.sy = sy;
this.r = 1;
this.show = function() {
ctx.fillStyle = "white";
ctx.beginPath();
ctx.arc(this.x, this.y, this.r, 0, Math.PI*2);
ctx.fill();
ctx.closePath();
};
this.move = function() {
this.x += this.sx;
this.y += this.sy;
};
this.wrap = function() {
if (this.x > width+this.r) {
this.x = -this.r;
} else if (this.x < -this.r) {
this.x = width+this.r;
}
if (this.y > height+this.r) {
this.y = -this.r;
} else if (this.y < -this.r) {
this.y = height+this.r;
}
};
}
function Player() {
this.pos = new Vector(width/2, height/2);
this.r = 15;
this.heading = 0;
this.facingX = 0;
this.facingY = 0;
this.show = function() {
ctx.strokeStyle = "white";
ctx.save();
ctx.translate(this.pos.x, this.pos.y);
ctx.rotate(this.heading);
ctx.beginPath();
ctx.moveTo(-this.r, this.r);
ctx.lineTo(this.r, this.r);
ctx.lineTo(0, -this.r);
ctx.closePath();
ctx.restore();
ctx.stroke();
};
this.move = function() {
this.pos.x += this.facingX;
this.pos.y += this.facingY;
this.facingX *= 0.95;
this.facingY *= 0.95;
};
this.applyForce = function() {
var force = new Vector(Math.sin(this.heading), -Math.cos(this.heading));
force.x *= 0.5;
force.y *= 0.5;
this.facingX += force.x;
this.facingY += force.y;
};
this.rot = function(angle) {
this.heading += angle;
};
this.wrap = function() {
if (this.pos.x > width+this.r) {
this.pos.x = -this.r;
} else if (this.pos.x < -this.r) {
this.pos.x = width+this.r;
}
if (this.pos.y > height+this.r) {
this.pos.y = -this.r;
} else if (this.pos.y < -this.r) {
this.pos.y = height+this.r;
}
};
}
var player = new Player();
var bullets = [];
function draw() {
ctx.fillStyle = "black";
ctx.fillRect(0, 0, width, height);
for (var i = 0; i < bullets.length; i++) {
var b = bullets[i];
bullets[i] = new Bullet(b.x, b.y, b.speedX*10, b.speedY*10);
bullets[i].move();
bullets[i].wrap();
bullets[i].show();
}
if (spacePressed) {
bullets.push({x: player.pos.x, y: player.pos.y, speedX: Math.sin(player.heading), speedY: -Math.cos(player.heading)});
};
player.wrap();
player.move(player.facingX, player.facingY);
player.show();
if (leftPressed) {
player.rot(-0.1);
} else if (rightPressed) {
player.rot(0.1);
}
if (upPressed) {
player.applyForce();
}
}
function update() {
draw();
requestAnimationFrame(update);
}
update();
<!DOCTYPE html>
<html>
<head>
<title> Asteroids </title>
<style>
body {
font-family: Helvetica;
}
</style>
</head>
<body>
<canvas width="500" height="500" id="canvas"></canvas>
<script src="asteroids.js"></script>
</body>
</html>
最佳答案
每帧重新初始化 Bullet 对象是问题出现的地方。
for (var i = 0; i < bullets.length; i++) {
bullets[i].move();
bullets[i].wrap();
bullets[i].show();
}
if (spacePressed) {
bullets.push(
new Bullet(
player.pos.x,
player.pos.y,
Math.sin(player.heading) * 10,
-Math.cos(player.heading) * 10
)
);
spacePressed = false;
};
这允许项目符号对象相应地更新,您也可以使用 instanceOf
检查项目符号的类型,但从长远来看,这会降低可读性。
添加了spacePressed = false
,以防止按一次空格键时出现多帧子弹。
我有一个fiddle here这样您就可以看到它的实际效果。
关于javascript - 小行星子弹运动难度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45107513/
对于我试图为 Oracle SQL 数据库编写的查询,我只是试图从 CI 表中获取所有由某人/某物拥有的行,这些行未列在 sys_user 表中,但返回的结果是由手动检查以下查询实际上在 sys_us
有人可以解密以下内容吗? const connection = (closure) => { return mongoClient.connect(connectionString,(err,
这里是 iOS 开发新手。我的数组有问题。我正在使用 iCarousel 制作应用程序。每当它停止到一个 View 时,它将删除当前 View 或索引,如下所示: NSInteger inde
//RootViewViewController.h #import #import "SettingsViewController.h" #import "OneSlotViewControlle
我正在构建一个游戏,玩家可以在游戏板上拖动一 block 棋子。我想知道那 block 下面的所有节点是什么,但我得到了奇怪的结果。这是 touchesMoves 函数: override f
如果你想看看我有问题的代码,这里是链接: Code 我的问题与我的 past question 有关. 我的 NSMutableArray 真的有问题, 我目前正在使用 iCarousel我的 slo
我需要将联合对象类型(可能有嵌套联合)转换为 可选值的深度交集 类型。基本上所有可能的字段都将相交,并且仅当它存在于联合的一侧时才是可选的 - 并对所有嵌套对象执行此操作。 注意:这不是一个简单的并集
我目前正在开发一个允许直接连接到某些社交网络的程序。这是代码: browser = webdriver.Firefox(executable_path = '/usr/local/bin/geckod
我使用 CakePHP 2.0 作为我网站的框架,我在 CSS 方面遇到了一些困难。基本上出了什么问题是我在 default.ctp 页面上定义了我的 CSS 文件。它在这个页面上工作,但是如果我导航
我正在尝试创建一个 NSTimer 以便我可以将 UIImageView 向下移动但是NSTImer 有困难,先说这个。 var timer = NSTimer.scheduledTimerWithT
我使用 RecaptchaControl ,并且用户提示图像不是那么清晰(验证码中的黑色部分太难阅读)。是否有任何属性可以使图像变得不那么困难(噪音更小)? 最佳答案 简单来说,不是。 正如其他人
我想把几个jpg文件转换成png文件。据我所知,可以使用这个命令 mogrify -format png *.* 我有一个问题,我有很多子文件夹。假设 a 是我的主文件夹,b,c 和 d 是子文件夹。
我正在编写一个带有动态相关选择的简单表单。有两个文件。一个是一个 php 文件,里面有 html、javascript 和 php,第二个是一个 php 文件,用于获取第二次选择的数据并以 json
我正在丢失重音字符。 我从 PHP 下载一个使用 UTF8 的 xml 文件,而我的 PHP 脚本使用 Latin1。我无法将 UTF8 转换为 Latin1。 我已经尝试过这个: $meta=mb_
我在从 json 结果填充 TableView 时遇到困难。我的代码如下(抱歉,但它似乎不想将前两行作为代码:/): 导入 UIKit ViewController 类:UIViewControlle
在母版页中我有以下代码: @ViewBag.Title @RenderBody() 然后在 Index.csh
我想顺序绘制一系列 x,y 坐标,同时清楚地标记指定的坐标。似乎“markevery”允许用户在 matplotlib 图中执行此操作,但是,当我在动画中提供此属性时,我收到错误“ValueError
我正在尝试一个示例程序来了解上一个和下一个排列之间的区别。但是,我的程序似乎无法正常运行。我通过询问数组中元素的数量来启动程序,然后使用简单的 for 循环构建数组 for(i = 0; i < x;
使用 Flex 和 Bison,我有一个 boolean 查询语言的语法规范,它支持逻辑“与”、“或”和“非”操作,以及使用“()”的嵌套子表达式。 一切都很好,直到我注意到诸如“A 和 B 或 C
用例:第 3 方应用程序想要以编程方式监视另一个程序生成的文本文件。文本文件包含您要在更新时分析的数据。 我发现围绕 FileSystemWatcher 这个问题有很多答案,但假设您正在为 Windo
我是一名优秀的程序员,十分优秀!