热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavascriptHTML5Canvas子弹朝向鼠标-JavascriptHTML5Canvasbulletstowardsmouse

ImtryingtomakeagameinJavascripttolearnsomethingnewandsofarivefiguredouthowtomak

Im trying to make a game in Javascript to learn something new and so far i've figured out how to make the player sprite look at the mouse however I cant make the bullets work the same way, i've tried adding translate but it just bugs out. I would very much appreciate some help :) https://jsfiddle.net/x9heq7qa/

我试图在Javascript中制作游戏以学习新的东西,到目前为止我已经想出如何让玩家精灵看看鼠标然而我不能让子弹以相同的方式工作,我试过添加翻译但它只是错了。我非常感谢一些帮助:) https://jsfiddle.net/x9heq7qa/

this.update = function(){
    for (var i = 0, len = playerBullets.length; i = 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);
    }
} 

1 个解决方案

#1


0  

Bullets fly in a strait line that goes from the initial point {x, y} of the bullet creation. So, the canvas should be rotated around the initial bullet point. Bullet position can be described by another property: traveled distance.

子弹在从子弹创建的初始点{x,y}开始的海峡线中飞行。因此,画布应围绕初始项目符号旋转。子弹位置可以用另一种属性来描述:行进距离。

To rotate objects it is not needed to translate and rotate canvas back to initial state. It is possible to use Context.context.save(); and then Context.context.restore();:

要旋转对象,不需要将画布转换并旋转回初始状态。可以使用Context.context.save();然后是Context.context.restore();:

this.update = function(){
    for (var i = 0, len = playerBullets.length; i = 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();
    }
}

There is another bug. Mouse mouse handler is attached during drawing each frame. So, number of attached mouse handlers continuously grow. The handler should be attached only once in the function ready().

还有另一个错误。在绘制每个帧期间附加鼠标鼠标处理程序。因此,附加的鼠标处理程序的数量不断增长。处理程序应该只在函数ready()中附加一次。

Note that the sprite function rotate() does not really have to draw that sprite. It is enough to store new angle. The sprite is refreshed by the frame animation handler animloop().

请注意,精灵函数rotate()实际上不必绘制该精灵。存储新角度就足够了。精灵由帧动画处理程序animloop()刷新。

Of course it makes sense to think about deletion of bullets that are already not active.

当然,考虑删除已经不活跃的子弹是有意义的。

Fixed runable example: https://jsfiddle.net/5cmn9s86/

修复了可运行的示例:https://jsfiddle.net/5cmn9s86/


推荐阅读
  • 表单提交前的最后验证:通常在表单提交前,我们必须确认用户是否都把必须填选的做了,如果没有,就不能被提交到服务器,这里我们用到表单的formname.submit()看演示,其实这个对于我们修炼道 ... [详细]
  • Itwasworkingcorrectly,butyesterdayitstartedgiving401.IhavetriedwithGooglecontactsAPI ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 用JavaScript实现的太空人手表
    用JavaScript实现的太空人手表-JS写的太空人手表,没有用canvas、svg。主要用几个大的函数来动态显示时间、天气这些。天气的获取用到了AJAX请求。代码中有详细的注释 ... [详细]
  • 但有时候,需要当某事件触发时,我们先做一些操作,然后再跳转,这时,就要用JAVASCRIPT来实现这一跳转功能。下面是具体的做法:一:跳转到新页面,并且是在新窗口中打开时:复制代码代码如下:fu ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了在满足特定条件时如何在输入字段中使用默认值的方法和相应的代码。当输入字段填充100或更多的金额时,使用50作为默认值;当输入字段填充有-20或更多(负数)时,使用-10作为默认值。文章还提供了相关的JavaScript和Jquery代码,用于动态地根据条件使用默认值。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • Ihaveaforminadirectivetemplate:我在指令模板中有一个表单:<formn ... [详细]
  • 前言对于从事技术的人员来说ajax是这好东西,都会使用,而且乐于使用。但对于新手,开发一个ajax实例,还有是难度的,必竟对于他们这是新东西。leo开发一个简单的ajax实例,用的是 ... [详细]
  • javascript如何判断值是否为undefined
    这篇文章主要介绍“javascript如何判断值是否为undefined”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ja ... [详细]
author-avatar
手机用户2602915825_387
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有