【发布时间】:2015-02-18 02:15:17
【问题描述】:
我正在使用画布来可视化我的一个小游戏。 基本上我有两个代表太空船的对象,每个对象都有一个“位置”数组,其中保存着飞船当前的 x/y。 根据这些数组,我在画布上绘制图像(totalw/h 为 300/300 fyi)。
现在,对于困难的部分。 我想在该画布上绘制动画(枪声)。基本上是从ship1 x/y 到ship2 x/y。
对于动画函数本身,我传递了一个包含 3 个数组的效果对象,shooter.location[x, y], target.location[x, y] 和第三个数组,其中包含当前 EFFECT 在 [x , y]。
this.animateEffects = function(effects){
var shooter = effects.shooter;
var target = effects.target;
var current = effects.current;
var canvas = document.getElementById("effects");
var context = canvas.getContext("2d");
context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.fillStyle = "red";
context.arc(current[0], current[1], 5, 0, 2*Math.PI);
effects.current[0]++
effects.current[1]++
context.fill();
if (current == target){
console.log("ding");
this.end()
}
}
我的“问题”是,如果可能的话,我正在寻找一种聪明的方法来确定(对于每一帧) effects[x, y] 是否应该去 ++ 或 -- 或两者的组合,具体取决于在“移动”的船只所在的位置(当时,拍摄开始)。
感谢任何建议或提示。
【问题讨论】:
-
如果我没记错的话,你想让
effects跟随移动的船吗? -
没有。船只在着火点处是静止的。玩家 A 移动,玩家 B 移动。玩家 A 舰船向玩家 B 舰船开火,反之亦然。
-
嗯,好的。然后你应该将目标船在开火时刻的位置保存在一个变量中(
var shootLocation)。然后检查效果的位置到shootLocation。if(effect.x > shootLocation.x){// --}else{//++} -
这不行。我试过了。问题是,子弹不会直接穿过目标,但它会做一个轴直到它对齐,然后它会做另一个轴。
-
你应该将
x和y添加到同一帧中,这样如果它们不对齐就会产生对角线轨迹。
标签: javascript arrays html canvas