首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用HTML5-Canvas 写一个桌球游戏!

整个桌球游戏就两个类,一个是,一个是辅助瞄准线。如果想把改游戏弄的更复杂,还可以再抽象一个形状类,用于检测与边角的碰撞以及进球。...我的这个游戏采取了最简单的墙壁碰撞检测,所以没有进行与不规则形状的碰撞检测,接下来就一步一步来: 【】 var Ball = function(x , y , ismine){ this.x =...因为两个碰撞那一帧,两个是有部分重叠的,所以得进行位置修正,不然小球会一直处于碰撞然后就黏在一起了,位置修正的原理也简单,算出两的球心距离,通过勾股定理计算出两的重叠区域的宽度,然后把宽度除于2...后赋给小球新的位置,新的位置就是两个的半径刚好等于球心距。...鼠标按下的时候旁边产生一个力量计,我就只用用animation动画了,然后鼠标按键抬起时通过计算力量计的大小来确定白的速度,然后再分解成水平速度以及垂直速度赋给白

1.8K30

​Cocos Creator入门实战:桌球小游戏

由于小球是需要移动的,并非静止不动,因此刚体的Type选择为Dynamic AllowSleep一定要勾选上 Linear Damping设置为1.2,Angular Damping设置为0.8,通过这两个值我们可以让小球在没有其他外力或者碰撞时从运动中慢慢的停止下来...,松开鼠标左键,球杆向前击打白的动作 球杆击打时,向白发送自定义事件,使得白进行运动 接受白发送过来的自定义事件,使得白球运动过程中,球杆不能操作并隐藏显示 明确了需求,并对需求进行功能拆分后..._mouseDown = false; //创建自定义事件"cue",并派发出去 //事件有两个参数,一个是force,通过这个值,白可以计算击球力度...脚本的代码编写 白脚本 wball.js需要做的事情就相对比较简单了: 监听击球事件“cue”,通过击球力度和坐标计算出白被击打后的线速度 当白停止运动时,也就是刚体的awake状态为false...table.js 最后的脚本是我们的桌脚本,这个脚本主要负责几个事情: 入袋的逻辑,红入袋的记分以及胜负判定;白入袋的重置白位置逻辑 开始游戏或是重新开始的游戏逻辑:重置记分以及重置白的数量位置

2.5K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CocosCreator一步一步实现重力游戏

    『 获取源码 』 关注公众号,发送“重力”获取源码 『 游戏玩法 』 通过手机陀螺仪,调整手机,让从上一层的间隔中落到下一层,楼层会不断上涨,如果碰到上方或者下方的火焰,游戏结束。...创建游戏脚本 我们就直接将HelloWord.js改个名字,改名为gameLayer.js,删除多余代码,只保留基础框架,如下图: ? 6....小球设置 接着我们创建一个小球,给小球绑定一个刚体,它就会沿着重力加速度方向自由落体运动了: ? 现在运行项目,就可以看到一个小球垂直落下啦。 13....游戏结束判断 当小球碰撞了上下燃烧的火焰时,判定游戏结束,这时需要进行碰撞监听,我们创建一个contact.js脚本,绑定在火焰刚体和小球刚体上,并将这两个刚体开启碰撞监听,将tag值设置为0(我们将除这两个以外的其他刚体的...然后在脚本中实现碰撞监听函数: ? 通过判断碰撞物体身上的tag值来决定是否需要处理碰撞回调。 21.

    1.5K40

    HTML5 Canvas开发详解(6) -- 边界碰撞检测

    判断两个矩形是否发生碰撞,只需要判断两个矩形左上角的坐标所处的范围,如果两个矩形左上角的坐标满足一定条件,则两个矩形就发生了碰撞。...示例:简易俄罗斯方块 //tools.js //判断两个矩形是否发生碰撞 tools.checkRect = function(rectA, rectB){ return !...对于外接圆判定法,一般也需要两个步骤,即找出物体的外接圆然后对外接圆进行碰撞检测。 判断两个圆是否发生碰撞,只需要判断两个圆心之间的距离。...如果两个圆心之间的距离大于或等于两个圆的半径之和,则两个圆没有发生碰撞;如果两个圆心之间的距离小于两个圆的半径之和,则两个圆发生了碰撞。...true : false; } 示例:两个碰撞 //tools.js //判断两个圆形是否发生碰撞 tools.checkCircle = function(circleB, circleA){

    1.2K20

    pktball游戏解析

    两个不一样的东西拿来对比,很容易引起反感。 比如对着谷歌说,你们就是那家美国版的百度吧? ? 总之开始解析游戏吧。 游戏流程 游戏开始菜单 ?...这个框体可与的框体进行碰撞判定。 第三个是图中蓝色框体,蓝色框体可与挥拍的红框碰撞,也会与边界的淡蓝色框碰撞。...不同碰撞调用不同的反馈,与挥拍碰撞,改变的图像,然后调整飞行方向,与边界框碰撞,如果该边界框不属于界外,则改变飞行方向。...因为没有用工具去解析,所以只能大致给个方案,碰撞判定最大的计算量在与挥拍与碰撞,而新的方向计算应该是两个碰撞框的中心连接线的方向。...最后,这是没有借助工具的简单解析,只是提供一个思路,pktball是否真的这么的,完全不知道。 那么根据这个思路,就一定能做出pktball吗?

    87680

    另一个角度看量子计算:与弹球碰撞的惊人关联

    弹性 这些复杂的量子操作似乎和弹性没有关系。但是,Brown 在研究与 Grover 算法相关的问题时看到了数学科普者 Grant Sanderson 的一个动画,让他注意到了两者之间的相似性。...在论文《Playing Pool with π》中,他想象有两个能在水平面上无摩擦地运动的理想弹性,它们能彼此以及与左侧的墙发生完全弹性碰撞(即总动能守恒)。...如果两个的质量相等,碰撞会发生 3 次:第一次右侧会把所有运动转移给左侧,左侧则在撞墙后反弹,然后又通过碰撞将动量完全返还给右侧。...举个例子,Grover 算法的两个量子操作可以分别对应于碰撞碰撞。质量比对应于数据库的大小。此外,最终的结果是:操作数(或碰撞数)正比于 π 以及数据库规模(质量比)的平方根。...例如,对于两个质量为 m(速度为 v_m)和 M(速度为 v_M)的弹性,弹性碰撞会保留两者的总动能 ? 。

    55820

    神经网络小游戏——泥煤排球

    虽然这个游戏在物理上面有一些投机取巧的部分,但是许多跟我一样的孩子却被它深深的吸引了,并且日以继夜的花费时间在宿舍打游戏而没有其他实际性工作。...第一步是写一个简单的物理引擎程序,让从地面反弹,与围墙碰撞,并与球员碰撞。这是通过在javascript中使用设计p5.j​​s来完成的,还有一些简单的物理数学例程。...最后,我使用基本的CNE方法作为初始测试,来训练标准的循环神经网络,使用convnet.js库一起入侵。...我没有使用sigmoid函数,而是使用双曲正切(tanh)函数来控制convnet.js支持的激活。...训练这样一个经常性的神经网络涉及到我之前的遗传算法训练器的调整,因为实际上没有可以返回得分的适应度函数,因为任何一个人都可以赢得或者失去一个匹配。

    1.1K81

    物理世界的互动之旅:Matter.js入门指南

    比如创建了一个(刚体),然后用 Composite 将和引擎连接起来,这样就会收到物理规则的影响了。...在 Matter.js 中,碰撞响应的计算是基于物体的质量和速度等参数的。比如,当两个物体相撞时,质量越大的物体会对速度的改变产生更小的影响,而质量越小的物体会对速度的改变产生更大的影响。...跷跷板使用了 Matter.Constraint.create 约束处理,其中的参数 bodyA 和 bodyB 用来指定要约束的两个物体。...collisionStart:当两个物体开始碰撞时触发。 collisionActive:当两个物体持续碰撞时触发。 collisionEnd:当两个物体停止碰撞时触发。...其中,pairs 是指一对正在碰撞的物体。当两个物体相互碰撞时,它们就被组成为一个 pair 对象。 我们可以通过 event.pairs 属性来访问有关碰撞的更多信息。

    2K10

    Unsupervised Learning of Latent Physical Properties Using

    例如,在两个弹性碰撞的系统中,碰撞只能告知我们每个物体相对于另一个物体的质量,而不是它们的绝对质量值。为了允许绝对属性值的推断,我们让每个系统的第一个对象充当参考对象并在每个系统中采用相同的属性值。...碰撞的COR是沿着垂直于接触平面的轴的两个碰撞物体之间的最终相对速度与初始相对速度的比率。...用于计算两个之间碰撞的动力学的COR被定义为两个碰撞对象的COR的最大值。当与墙碰撞时,的COR用于碰撞。...我们使用物质-js3,一种通用的刚体物理引擎,用于生成地面实况数据。在所有模拟中,都包含在 512 px × 512 px的封闭盒中。每个的半径为50像素,随机初始化的位置使得没有重叠。...在 - 碰撞中,只有较高的物体COR用于确定碰撞动力学,因此只能从碰撞中推断出较高的物体COR。因此,每个必须与较低COR的或墙壁碰撞

    95130

    Canvas 性能优化:脏矩形渲染

    这里我们假设这么一个场景,画布上绘制了随机位置大量的绿,然后顶层再绘制一个红。 现在我们希望红跟着光标进行移动,底层的绿保存不动,该怎么更新?...OK,回到正题,思考一下怎么更新? 一种容易想到的方案是 全量更新,在鼠标移动的时候,将所有的重新绘制一遍。...通常用作低成本的碰撞检测。因为矩形的碰撞检测的算法是简单高效的,而复杂图形的碰撞检测是复杂且低效的。...这里还有个优化点,就是减少遍历的图形数量,可以使用 四叉树碰撞检测 来优化,具体读者可以自行网上搜索,晚点我会写一篇文章进行讲解。...) 该算法用于找出和脏矩形碰撞的绿

    1.3K10

    CreatorPrimer(17)|物理小游戏(物理组件)

    (篮框就利用了这个属性) Friction:摩擦系数 Restitution:弹性系数,要让掉在地上能弹跳值要大于0,如果设置为1(最大值)可能会在原地无限弹跳 Offset:刚体与节点的偏移,尽量让两者重合...监听碰撞事件 请认真思考一下,碰撞事件的监听放在那个节点最好?我们以需求为向导,当进入篮框更新得分,是将碰撞监听安装在篮球上还是篮框上?再进一步,篮框分左右两个,得分分别显示得分。...请看下图,我们添加一个自定义的碰撞组件: ? 篮球框刚体 请仔细看上图中的组件属性配置,篮框是空心的,可以穿透,因此需要选择中碰撞组件的Sensor属性。...中间的生命值标签也是用同样的机制实现,只不过是碰撞到左右两边红色围栏,发出别一个事件,生命值标签的step为-1从表示出的是减分的效果。 4....通过两个通用的组件将投篮记分和碰触边框减分实现了,是不是很简单呢?之前Shawn保证过,前两篇不讲代码,只讲组件使用,但下一次我们要进入组件代码的学习,核心代码不到50行,非常简单,敬请期待!

    1K30

    用神经网络玩史莱姆排球

    所以我开始创建我自己的基于js + html5的游戏版本(完成了神奇的街机风格的“物理引擎”)。我尝试使用之前写的的遗传算法来训练一个简单的循环神经网络来玩史莱姆排球。...第一步是写一个简单的物理引擎,完成与地面的反弹效果,与围栏、玩家的碰撞效果。 这是使用JavaScript中的设计器p5.js库和一些简单的物理数学方程来完成的。...最后,我使用基本的CNE方法作为初始测试,训练标准的循环神经网络,同时利用convnet.js库训练。下图是我们利用循环(神经)网络训练后的图表,当当当当!...我没有使用sigmoid函数,而是使用支持convnet.js的双曲正切(tanh)函数来控制。...训练这样一个递归的神经网络涉及到我之前的遗传算法训练器,因为实际上没有适合的方法可以返回一个分数,因为任何一方都会有输赢。我最终的是写一个类似比赛的功能,让训练人群中的每个AI都能与其他AI竞争。

    932101

    第10步《前端篇》第3章完成交互功能第7课

    学习目标 使用定时器实现动画; 了解JS语言的异步执行执行; 学习13种复合赋值运算符; 通过边界检查实现碰撞检测; 使用requestAnimationFrame实现动画。...JS两个定时器方法 setInterval 和 setTimeout,其中setInterval 以指定毫秒数为间隔,不停地执行回调函数;setTimeout 在暂停指定毫秒数后,执行回调函数,且仅执行一次...JS 是单线程,同一时间只能执行一个任务,同步任务在主线程中会依次执行。在主线程上发起的异步操作,会交给另外一个看不见的异步线程执行和管理,不会阻塞主线程的执行。...JS 有 13 种复合赋值运算符,复合赋值运算符等于先运算,再以运算结果赋值。具体运算符号略。 在 Canvas API中,clearRect 方法可以清空画布上给定矩形区域内的像素。...每次小球在碰到边界时,有半个几乎都会陷入墙壁中。这是由于碰撞检测的坐标是以小球的圆心为准的,如果以圆弧边界进行检测,或者将画布的四周边界值都减少一个小球半径的宽度,问题便能解决。

    53520

    借Blake老师的投篮小游戏公开课入门Cocos Creator 3D开发!

    游戏介绍 ● 点击屏幕,根据按住屏幕的时间,进行蓄力,时间越短,发出去的力越小,时间越长,发出去的力越大,超过了最大力,再次从最小里开始,从篮筐中穿过得1分,否则视为不得分,由于的是demo,就没有其他限制...算分的具体思路是:在篮筐碰撞体正下方放置一个检测是否进球的碰撞体,碰撞体设置小一点,太大了,更容易产生误碰撞从篮球框落下的时候,刚好能撞到这个碰撞体,这个需要慢慢调整,本demo里,可能也还有一些问题...然后检测碰撞体事件,碰撞结束以后,表示得分。 ?...●为了不重复计算,会给篮球添加一个新状态,得分状态,得分检测的碰撞体,在检测到碰撞结束以后,设置为得分状态,下次得分的时候,如果已经是得分状态,就不重复算分。 ?...●设置有最小最大投掷速度,防止力气过大飞很远,力气很小,没什么运动距离,这个可以根据观测效果进行调整,为了能够调整投掷力度的大小,到了最大值以后,会重新从最小值开始计算,表现在进度跳上就是,到了最大值以后

    86310

    python弹球案例分析_Python实战案例:用Python写一个弹球游戏,就是这么强

    好主界面有了,我们就开始创建  1)首先我们创建一个Ball的类,这个类的初始化参数有两个:  一个canvas也就是画图用来画一个,一个是color,表示的颜色  2)在类的初始化的函数里面...1)写死0,-1,表示x坐标不动,y坐标不断的-1也就是在向上运动  现在我们把这两个值设成两个变量self.x,self.y,当我们的球运动到上边界的时候,就把self.y加1,也就向下运行,  当运动到下边界的时候...了,怎么呢,很简单增加一个随机函数就可以了  在__init__()函数里面,我们改一下  self.x = 0  self.y = -1  变成:  starts=[-3,-2,-1,1,1,2,3...:  就是按键盘左键就是响应self.turn_left  就是按键盘右键就是响应self.turn_right  evt是向系统注册的事件  8.增加和木板的碰撞  现在也有了,木板也有了,而且可以左右挪动...,现在最精彩的部分要上演了,就是增加碰到木板之后反弹,那么如何判断碰到木板了,简单我们只要在的类里面增加一个函数来判断是否碰撞了  def draw(self):  --snip--  if self.hit_paddle

    48500

    Python实战案例:用Python写一个弹球游戏,就是这么强

    好主界面有了,我们就开始创建 1)首先我们创建一个Ball的类,这个类的初始化参数有两个: 一个canvas也就是画图用来画一个,一个是color,表示的颜色 2)在类的初始化的函数里面 初始化...x坐标不动,y坐标不断的-1也就是在向上运动 现在我们把这两个值设成两个变量self.x,self.y,当我们的球运动到上边界的时候,就把self.y加1,也就向下运行, 当运动到下边界的时候,就把self.y...获取了的坐标之后(它是一个list),判断一下pos[1]和pos[3]就可以了 5.增加的运行方向 现在我们的的运动方向是固定的,我们希望每次的运动方向要随机,不然太low了,怎么呢,很简单增加一个随机函数就可以了...: 就是按键盘左键就是响应self.turn_left 就是按键盘右键就是响应self.turn_right evt是向系统注册的事件 8.增加和木板的碰撞 现在也有了,木板也有了,而且可以左右挪动...,现在最精彩的部分要上演了,就是增加碰到木板之后反弹,那么如何判断碰到木板了,简单我们只要在的类里面增加一个函数来判断是否碰撞了 def draw(self): --snip-- if self.hit_paddle

    2.6K10
    领券