问题描述
我的游戏动作有问题。我要么错误地使用了 sin 和 cos 来计算真正的 X,Y 来移动屏幕(角色保持居中),要么计算时间太长,刷新速度不够快。以下代码在使用 window.requestAnimationFrame 继续循环的游戏循环中实现。
有时它会朝着正确的方向移动,有时它会朝着与我预期相反的方向移动,但这种行为并不一致。
我的角度范围为正负 (0-360),具体取决于头像是顺时针旋转还是逆向旋转(这部分代码正确注册)。 我已经测试了 BattleField 对象设置方法以确保它们正确设置顶部和左侧。 我已经测试了 BattleField 对象方法以确保它返回正确的顶部和左侧值(整数形式,没有像“px”这样的单位指示符);
非常感谢任何想法或建议。
let battleField = {
id: 'battleField',speed: 5,get speedTop() {
let rotateNum = parseInt(rotateAngle,10);
let radians=rotateNum*Math.PI/180
let truetop=userAvatar.speed*(Math.sin(radians))
return truetop;
},get speedLeft() {
let rotateNum = parseInt(rotateAngle,10);
let radians=rotateNum*Math.PI/180
let trueLeft=userAvatar.speed*(Math.cos(radians))
return trueLeft
},get element() {
let elm = document.getElementById(this.id);
return elm;
},get bottom() {
let elmBottom = parseInt(window.getComputedStyle(this.element).bottom,10);
return elmBottom;
},get top() {
let elmTop = parseInt(window.getComputedStyle(this.element).top,10);
return elmTop;
},get left() {
let elmLeft = parseInt(window.getComputedStyle(this.element).left,10);
return elmLeft;
},get right() {
let elmRight = this.left + this.width;
return elmRight;
},get width() {
let elmWidth = parseInt(window.getComputedStyle(this.element).width,10);
return elmWidth;
},get height() {
let elmHeight = parseInt(window.getComputedStyle(this.element).height,10);
return elmHeight;
},set setBottom(value) {
this.element.style.bottom = value + 'px';
},set setLeft(value) {
this.element.style.left = value + 'px';
},set setRight(value) {
this.element.style.left = (value - 50) + 'px';
},set setTop(value) {
this.element.style.top = (value) + 'px';
},get maxRight() {
if(this.left<screenArea.width-this.width){
return true;
}
},get maxLeft() {
if(this.left>=0){
return true;
}
},get maxTop() {
if(this.top>=0){
return true;
}
},get maxBottom() {
if(this.top<screenArea.height-this.height){
return true;
}
}
}
let userAvatar = {
speed:5
}
let rotateAngle="15deg";
function loop(){
let rotateNum = parseInt(rotateAngle,10);
let radians=rotateNum*Math.PI/180
let newTop= battleField.top + (Math.sin(radians) * userAvatar.speed);
let newLeft= battleField.left - (Math.cos(radians) * userAvatar.speed);
battleField.setTop = newTop;
battleField.setLeft = newLeft;
window.requestAnimationFrame(loop);
}
window.requestAnimationFrame(loop);
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)