不做换皮游戏--从0开始努力了1个月,终于上线了-一个人的旅程

不做换皮游戏-从0开始努力了1个月,终于上线了

ps:我也是新手,描述不正确请大神轻点拍
`

1.学习历程:开始接触cocos creator

​    先说下技术方向:大学学过java,毕业后没有从事编程的工作。
   一个偶然的机会,看到微信小游戏支持游戏引擎开发,感觉有点意思,琢磨了自己搞一个试试水。

​    先后考察了 egret、laya、ccc 三个引擎,分别试着写过 入门的教程

​    说说为啥选择了ccc 吧:

​     之前用untiy,简单做过一个demo,个人认为unity的模式比较适合我这种技术比较菜的入门小白。 egret 就这样被略过了,看了看api,不合适。 laya air 官方文档好像跟IDE 不配套,看起来太费劲了,虽然据说是支持3d非常厉害。。 最后又回到了 ccc,之前了解过ccc是用js写游戏脚本,但是个人对js不感冒, 后来发现 ccc支持typescript了,据我了解 ts 支持强类型校验,并且结合vscode代码提示也不错。先看了2天的ts,入门,基本跟java差不多。​然后开始先弄了个demo,试了试,发现ccc 使用typescript 结合 vscode 工具流非常完善。关联号vscode之后,把那个菜单下的所有项都点一下,vscode就都关联好了。
   ​ 于是就开始着手准备了。

2、游戏设计

​    想做个卡通类IO游戏,类似于贪吃蛇大作战,但是需要在玩法上进行创新,不能抄袭,不做换皮游戏。

​    于是就开始了设计:

​    首先需要三要素: 1、简单容易上手 2、由于是对抗类,需要攻守兼备 3 、入门简单,玩精难。


​     游戏素材设计软件:

​     游戏素材用到的并不多,ui和全部游戏素材都是通过 inkscape 画的,如果是程序向,可以学习下,画一些简单的素材和ui非常方便。

2.1 界面相关

首屏加载:由于需要 加载游戏素材,选择了首屏加载策略,避免开始游戏的时候卡住
首先需要做两个场景,第一个场景尽量少,类似于下图这种,给个logo,给个进度条就好了,避免用户打开游戏的时候卡。图片资源尽量小一点,第二个场景是真正的游戏场景。
比如,我这个黑色背景并不是图片,而是摄像机设置成了黑色

在第一个场景的 onload函数中,加载第二个场景,并且 更新进度条,相关代码如下所示:

public static readonly MAIN_SCENE = 'Main'

    onLoad() {
        console.debug(' onLoad ');
        let  that = this;
        cc.director.preloadScene(MainMenu.MAIN_SCENE,
            (completedCount: number, totalCount: number, item: any) => {
                //console.debug(completedCount, completedCount / totalCount)
                that.progressbar.progress = completedCount / totalCount;
                that.infoLabel.string = 'Loading...(' + ((this.progressbar.progress) * 100.0).toFixed(0) + '%)'

            },
            (error: Error, asset: cc.SceneAsset) => {
                if (that.infoLabel == null){
                    return ;
                }
                that.infoLabel.string = 'Loading complete!';
            }
        )
    }

点击开始游戏的时候,在加载第二个游戏场景(真正游戏互动的场景)

 on_startbutton_click() {
        cc.director.loadScene(MainMenu.MAIN_SCENE);
    }

加载完成后,游戏界面如下所示:

先说下玩法介绍吧:
1:一开始是一个中心球,通过中心球,可以粘上 小球,越粘小球数量会越多
2:达到一定数量之后,中心球体会变大,同时小球和中心球之间的距离会边长
3:控制中心球,小心不要 其他玩家 周围的小球,注意躲避。同时 控制中心小球移动,通过周围的小球可以将其他玩家 击败
4:可以发射子弹,子弹碰到其他玩家的中心球,则其他玩家被击败,碰到其他玩家周围的小球,则被防护了。 发射子弹会减少一个小球。
5:由于是微信小游戏,采取了AI控制方式。

###2.2 玩法相关

由于用户和AI都需要显示,所有,抽取了一个基类 BasePlayer,负责显示,渲染,等相同的内容,然后用户和ai 分别编写控制脚本,比如,用户使用 触摸控制,ai自动控制。
这个是我的目录结构:

小提示:
关于emit事件: 玩家死亡,发射子弹等可以通过emit进行事件发射,在gamemanager类中,可以对相关的事件进行响应,但是emit 的参数不能自动提示,可以通过在player中编写一个 函数,定义callback的参数,这样,当在其他类中再去响应 die 事件的时候,就有代码提示了:

 onEmitPlayerDie(callback: (itemCount: number, killcount: number) => void, that) {
        this.node.on('die', callback, that);
    }

效果如下所示(再也不用返回到 player 类中去看看 对应的事件 到底传递什么参数出来了 ):

物理引擎的一些小知识

如何动态更改distance joint的 长度:
中心球和周围的小球通过distance joint 连接在一起,如果想改变distancejoint的长度,需要先禁用,在启用该组件。

                    element.enabled = false;
                    element.distance = this._jointDistanceCurrent
                    element.enabled = true;

2:不要尝试直接更改 刚体的线性速度的x,y值
错误示范:(这样是没有效果的)

 this.rigbody.linearVelocity.x = 100

正确示范:

this.rigbody.linearVelocity = cc.v2(100,0)

再附上几张游戏截图吧:

绝杀:


发射子弹:

看我无敌大:

快要 被击中了 。。。


​ 小游戏二维码:

8赞

加油你可以的

还在编辑中…

真的很不错,1个人一个月能做成这样实属不易,今天预计都放假了没有人,就让我这个周日还要加班的可怜人帮你顶一下吧:14:

多谢了

欢迎加入微信开发五毛贵族

兄弟你这美术风格不错呀,很有艺术细胞啊:+1:

大兄弟动手能力不错呀。

启动界面可以拿来当桌面了

来来来,互相扫一扫。玩一玩。

挺流畅的,就是玩起来没什么趣味。

你确定不是球球大作战?这个游戏很早之前不是有了吗

确定不是球球大作战啊

移动速度再快一点点会感觉体验会爽很多

我连续玩了一个星期,每次吃饭的时候玩一会儿,变大之后会有一种无敌的寂寞。但是变大之后其实也很容易四

感谢分享

如果想改变distancejoint的长度,需要先禁用,在启用该组件。
我被这坑惨了,官方也不提,这谁想得到啊。 别的引擎都是支持直接修改的

不知道楼主目前数据如何呀

这个是有后台的吧,问下楼主后台怎么弄的,是租了个服务器然后申请域名吗

没有后台,是单机版的,其他玩家都是ai 在操作。