用three.js写一个简单的3D射门游戏

这个小游戏很简单,一共由3个部分构成。1个平面(球场),1个球体(足球)还有一个立方体(球门)。

上个图给你们感受一下简陋的画风(掘金最高上传5M图片,原来图片都太大了压缩后很不清晰)

当按下空格键时,可以开始游戏。开始游戏后,视角会切换到球门正面,并且球门会开始左右移动。你所做的就是把足球踢进移动的球门中。J键是射门键,按下J键不松开,足球右侧会出现一个可以伸缩的黄色条状物... 这是模仿其他游戏里控制射门的力度,越长就代表力量越大。只按J是中路低平球射门,W+J是中路高球射门,A+J向左地平射门,A+W+J左高球射门,右侧D键同理。这里简述一下这个游戏是怎么运行的。


 力量条控制

首先还是keydown事件监听按键。我们设一个变量strong代表力量大小,初始值为0。然后我们考虑一下,进度条不能无限变大,要设定一个最大值假设为15。 我们先来解决控制进度条伸缩也就是实现让strong从0到15再从15到0然后循环效果。

加一个long()方法和一个short()方法。当然方法里还有其他操作,先略过

            function long(){

                setTimeout(function(){

                    strong += 1

                },100)

            }

            function short(){

                setTimeout(function(){

                    strong -= 1

                },100)

            }

一开始我想,当按下J键首先执行long()方法,然后当strong大于等于15的时候,再执行short方法就OK了。类似这样

            switch(e.keyCode){

                case 74:

                    if(strong>=15){

                        short()

                    }

                    else{

                        long()

                    }

                break;

            }

但是测试的时候发现不行,因为当strong等于15后,执行short(),strong变为14后又会继续执行long()了,实际上strong是先从0变成15,然后14 15 14 15循环。所以这里我增加了一个lock状态,初始值为false。

        switch(e.keyCode){

                case 74:

                    if(strong>=15){

                        lock = true

                        short()

                    }

                    else{

                        lock ? short() : long()

                    }

                break;

            }

当strong大于等于15时,lock变为true, 在short方法里增加当strong为0时,修改lock值为false。

然后我们把strong的变化在页面上表现出来,把立方体Z轴设为strong/100动态改变立方体的高度就行了。

球门和足球的移动

球门的移动是固定速度的,通过改变球门的X,Y,Z轴的位置使球门移动,当球门Y轴位置大于某个值时,让它向右移动。当Y轴位置小于某个值时向左移动。足球的移动原理和球门是一样的,但是我增加了力量对足球速度的影响和足球的转动。足球转动很容易,通过改变rotation即可实现。力量对足球的影响我这里也只是做了一小部门,即力量越大足球飞行速度越快,飞行距离越远。添加一个setInterval方法,在这个方法里声明一个变量times,这个times是用来决定这个setInterval执行多少次的。

            let shootBall = setInterval(function(){

                time = time + 0.5

                if(time == strong){

                    clearInterval(shootBall)

                }

                sphere.rotation.x += 1;

                sphere.position.x += strong/100;

            },100)

这里可以看出,力量越大,方法执行的次数也就越多,这样飞行距离就会变长。力量越大,每次足球移动的距离也会越大,所以速度就会越快。当然,力量对足球的影响不可能像我设计的这么简单,例如足球从加速到减速的过程就很复杂,我这里就直接忽视了。有兴趣的同学可以想一想怎么实现。

射门方式和碰撞检测

射门的方向和高度是通过组合按键控制的,组合按键也就是加keyStatus实现的,这个在我前一篇介绍中有就不说了。声明一个变量shootType,然后不同的射门方式都有自己独有的shootType,在keyup时间中监听射门键,当松开J键时,判断shootType来控制射门的方式。

碰撞检测呢是通过球门和足球X,Y,Z轴位置判断的。在足球飞行的过程中,如果检测到了碰撞则进球。


附上下载地址https://github.com/leslie233/3D-football

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容