javascript-检测画布边框上的碰撞
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-检测画布边框上的碰撞,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2538字,纯文字阅读大概需要4分钟。
内容图文
![javascript-检测画布边框上的碰撞](/upload/InfoBanner/zyjiaocheng/690/b335d5d0811349debfc976494bb3f0e9.jpg)
我正在和我的朋友们做一个小游戏,但是我试图在撞到画布的墙壁时检测到碰撞,并且使碰撞起作用,但是当我撞到墙壁时,我的角色被卡住了..我不知道该怎么做找出使他再次移动的方法.您是否认为任何人都可以帮助我解决这一问题.感谢您的帮助!
Javascript / jQuery:
function Player() {
this.w = 50;
this.h = 60;
this.x = (cW / 2) - (this.w / 2);
this.y = (cH / 2) - (this.h / 2);
this.name = username.value;
this.nw = ctx.measureText(this.name).width; // username.clientWidth + 1;
this.src = playerImage;
this.dx = 0;
this.dy = 0;
this.render = function() {
ctx.drawImage(this.src, this.x, this.y, this.w, this.h);
ctx.fillStyle = 'orange';
ctx.font = '15px Arial, sans-serif';
// fixa x-v?rdet
ctx.fillText(this.name, (this.x + this.w / 2) - (this.nw / 2), (this.y - 6));
}
}
var player = new Player();
function animate() {
if(player.x > 0 && player.y > 0 && player.x + player.w < cW && player.y + player.h < cH) {
player.x += spd * player.dx;
player.y += spd * player.dy;
}
else {
// Need code here to release player from wall
}
ctx.save();
ctx.clearRect(0, 0, cW, cH);
ctx.drawImage(bg, 0, 0);
player.render();
ctx.rotate(-.4);
raining();
ctx.restore();
}
var animateInterval = setInterval(animate, 1000/60);
document.addEventListener('keydown', function(e) {
var key_press = String.fromCharCode(e.keyCode);
switch(key_press) {
case 'W':
player.dy = -1;
break;
case 'A':
player.dx = -1;
break;
case 'S':
player.dy = 1;
break;
case 'D':
player.dx = 1;
break;
default:
break;
}
});
document.addEventListener('keyup', function(e) {
var key_press = String.fromCharCode(e.keyCode);
switch(key_press) {
case 'W':
player.dy = 0;
break;
case 'A':
player.dx = 0;
break;
case 'S':
player.dy = 0;
break;
case 'D':
player.dx = 0;
break;
default:
break;
}
});
解决方法:
您遇到的问题如下:
假设您的角色以每帧10像素的速度移动,当前角色位置为595px(角色的右侧),画布宽度为600.
在当前帧上,您正在检查是否存在碰撞:没有碰撞,因此您将速度添加到当前位置并获得605px.现在,在下一帧中,角色已超出范围,您不能再移动他,因为player.x player.width> canvas.width
你可以做什么:
1:检查碰撞并将角色移回视口内:
if (player.x + player.width > canvas.width) {
player.x = canvas.width - player.width;
}
由于碰撞检查现在失败,因此您可以将其移动到所需位置.
您应该对所有侧面进行此检查,但是每个侧面的逻辑都不相同,这是与左墙碰撞的示例代码:
if (player.x < 0) {
player.x = 0;
}
2:在if语句中,如果player.x player.vx超过canvas.width,则应在计算中增加速度,而不移动字符,但我更喜欢第一种方法,因为实际上您可以位于视口的侧面
使用画布位置的提示:始终在渲染级别上四舍五入您的位置:
this.render = function() {
ctx.drawImage(this.src, Math.round(this.x), Math.round(this.y), this.w, this.h);
...
}
内容总结
以上是互联网集市为您收集整理的javascript-检测画布边框上的碰撞全部内容,希望文章能够帮你解决javascript-检测画布边框上的碰撞所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。