Javascript HTML5 Canvas项目符号指向鼠标
Javascript HTML5 Canvas bullets towards mouse
我试图用Javascript制作一个游戏来学习新东西,到目前为止,我已经想出了如何让玩家精灵看着鼠标,但我无法让子弹以同样的方式工作,我尝试添加翻译,但它只是出错了。我非常感谢您的帮助:)https://jsfiddle.net/x9heq7qa/
this.update = function(){
for (var i = 0, len = playerBullets.length; i < len; i++) {
if(playerBullets[i].x >= 400 || playerBullets[i].y >= 400){continue;}
Context.context.rotate(playerBullets[i].angle);
playerBullets[i].x += playerBullets[i].vel;
Context.context.fillRect(playerBullets[i].x,playerBullets[i].y,4,1);
Context.context.rotate(-playerBullets[i].angle);
}
}
子弹在从子弹创建的初始点{x,y}开始的直线上飞行。因此,画布应该围绕初始项目符号点旋转。项目符号位置可以用另一个特性来描述:行进距离。
若要旋转对象,不需要将画布平移并旋转回初始状态。可以使用Context.context.save();
,然后使用Context.context.restore();
:
this.update = function(){
for (var i = 0, len = playerBullets.length; i < len; i++) {
// XXX: Check that bullet is out of canvas
if(playerBullets[i].distance >= 600) {continue;}
playerBullets[i].distance += playerBullets[i].vel;
Context.context.save();
Context.context.translate(playerBullets[i].x, playerBullets[i].y);
Context.context.rotate(playerBullets[i].angle);
Context.context.fillRect(playerBullets[i].distance,0,4,1);
Context.context.restore();
}
}
还有另一个错误。绘制每一帧时都会附加鼠标操纵器。因此,连接的鼠标处理程序的数量不断增长。在函数ready()
中,处理程序应该只附加一次。
注意,子画面函数rotate()
实际上不必绘制该子画面。存储新角度就足够了。子画面由帧动画处理程序animloop()
刷新。
当然,考虑删除已经不活动的项目符号是有意义的。
修复了可运行的示例:https://jsfiddle.net/5cmn9s86/
相关文章:
- EaseJS拖放;放下(动画CC)电影剪辑的鼠标坐标
- 当鼠标悬停在文本中的单词上时显示警报
- JsFiddle上的鼠标事件不起作用
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何在鼠标悬停时在另一个图像上滑动图像.
- 鼠标悬停事件影响列表中所有行中的按钮,而不仅仅是特定按钮
- 在.csv文件中写入学位符号
- 使用相同的数据集绘制各种符号
- 将鼠标旋转限制为特定的度数
- 跟踪jqplot垂直折线图的鼠标位置
- 将带点符号的属性(有时)传递给函数
- RegEx JavaScript:数字后的符号提取
- node-webkit-从父窗口捕获iframe鼠标事件
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- 射击目标:单击鼠标->保留项目符号Hole.gif
- 从当前鼠标位置设置内容可编辑插入符号位置
- 通过鼠标悬停amChart上具有相同颜色的线进行项目符号连接
- Javascript HTML5 Canvas项目符号指向鼠标
- 当我们将日期选择器设置为只读模式时,如何防止鼠标指针阻塞符号
- 画布-指向鼠标点的项目符号