cocos create游戏开发入门--Apple的学习笔记

一,前言

五一嘛,当然以玩为主题,延续我之前的python游戏开发中的数学和物理--Apple的学习笔记blog内容,正好之前看了游戏运动中的细节处理。但是没有框架,所以自己拿着python做了个简单的框架,然后就可以体验下细节功能设计的魅力。那么说到正经的游戏开发,UE4,unity3D等3d及vr渲染都比较好,但是我现在想玩的是简单的2D游戏开发。因为它的游戏引擎源码和我之前看的单片机中littlegvl的源码思路有些像。那么我就乘机玩玩吧!虽然我知道现在cocos已经不流行的,但是我要学习的是引擎相关的方法论,以及游戏的设计模式,所以不影响。

二,Cocos2D vc环境搭建

我先没有使用cocos create。直接想看c++源码编程。搭建步骤

  1. https://github.com/cocos2d/cocos2d-x去下载最新版本,我放在了D:\cocos2d-x-4.0\cocos2d-x-4.0
  2. Python要下载2.7.10,然后修改环境变量。(当前已删除此环境变量,要生成代码再加)
    a. 在github下载的目录下能看到bat文件。输入命令
    python download-deps.py
    若过程中无法下载则自己按cmd窗口的提示路径手工下载到py同级目录,并且zip包名字要改和cmd提示中的一致即可。
    b. 初始化一个cocos2d vc++工程配置环境。输入命令
    python setup.py
    c. 创建vc++工程
$ cocos new MyGame -p com.your_company.mygame -l cpp -d D:/cocospro
$ cd D:/cocospro/MyGame
$ mkdir build
$ cd build
$ cocos run --proj-dir .. -p win32

此时已经编译完成了。也可以通过win32-build文件夹打开vc++工程,自行编译。然后选择最后一个helloword工程作为启示工程进行运行。接着就是要学习api的使用了,这里面没有游戏设计模式接招,只能通过使用api来分析源码。那么我还是先简单点,学习怎么使用吧!于是开始用cocos create创建工程。

三,Cocos create环境搭建

这个比较简单,就是一个IDE。现在4.0已经结合了2d和3d,并且cc模块已经被淘汰了。关于这个IDE的使用,可以参考官网视频教程。已经cocos官网的脚本章节说明。
当然typescrpit我也没用过,只用过JavaScript,但是不涉及高级语法,我学起来很快的,顺便把lua语言基础也学习。因为看到了游戏热更新用lua比较多。也了解了下热更新的原理。

四,自制简单游戏

image.png

界面中可以看出结构,而且我只添加了一个ts脚本文件,就是通过wsad按钮来控制小球进行直线运动,目的是和我之前的python框做对比。没有用自动位置移动的update函数,这个其实也一样的思路,每次要设计不同的运动可以在update中自动设置下一帧位置。


image.png

等于我把田地选好了,上面可以种植多种多样的农作物。框架有了,就可以填充各种内容了。
typescript有了类的定义,真的不错,这样多态的实现和c++思路类似。这个语言怪不得排名一直在上升。而且它的库也很多,做APP的貌似就是要快,哈哈~

import { _decorator, Component, Node, systemEvent, SystemEventType, EventKeyboard, macro, CCInteger } from 'cc';
const { ccclass, property, type } = _decorator;

@ccclass('Test2')
export class Test2 extends Component {
    //@property({ type: Node })
    //private player = null;
    @type(Node) // 声明属性 _targetNode 的 cc 类型为 Node
    private player: Node | null = null;

    // 声明 speed 属性
    @property(CCInteger) // 声明属性 _id 的 cc 类型为 Cocos 整数
    private speed = 0;
    // [1]
    // dummy = '';

    // [2]
    // @property
    // serializableDummy = 0;

    start() {
        let objs = this.node.getChildByName("Player");
        this.player = objs;
        if (this.player === null) {
            console.log("error");
        }
    }

    // update (deltaTime: number) {
    //     // [4]
    // }

    onLoad() {
        console.log("start");
        systemEvent.on(SystemEventType.KEY_DOWN, this.onKeyDown, this);
        systemEvent.on(SystemEventType.KEY_UP, this.onKeyUp, this);
    }

    onDestroy() {
        systemEvent.off(SystemEventType.KEY_DOWN, this.onKeyDown, this);
        systemEvent.off(SystemEventType.KEY_UP, this.onKeyUp, this);
    }

    onKeyDown(event: EventKeyboard) {
        /*
        switch(event.keyCode) {
            case macro.KEY.a:
                console.log('Press a key');
                break;
        }
        */
    }

    onKeyUp(event: EventKeyboard) {
        switch (event.keyCode) {
            case macro.KEY.d:
                this.player?.setPosition(this.player.position.x + this.speed,
                    this.player.position.y,
                    this.player.position.z);
                console.log('Release a key s');
                break;
            case macro.KEY.a:
                this.player?.setPosition(this.player.position.x - this.speed,
                    this.player.position.y,
                    this.player.position.z);
                console.log('Release a key a');
                break;
            case macro.KEY.s:
                this.player?.setPosition(this.player.position.x,
                    this.player.position.y - this.speed,
                    this.player.position.z);
                console.log('Release a key s');
                break;
            case macro.KEY.w:
                this.player?.setPosition(this.player.position.x,
                    this.player.position.y + this.speed,
                    this.player.position.z);
                console.log('Release a key w');
                break;
            default:
                break;
        }
    }
}

五,总结

通过多种工具的对比及使用,终于对游戏开发中的设计有点思路的,因为看框架看来看去都是一样的。每一帧渲染可以通过定时器,然后就是运动算法,然后就是渲染显示。这就是基于事件模型的框架。
关于游戏中类的设计暂时还没有深刻的体会,之前看过一个esc游戏架构设计,通过组合模式来定义新的类,这样的类可以扩展很多。到时候也可以看些源码了解基于面向对象的游戏设计。
就是关于游戏引擎,了解也不深刻,但是有2个内容是我看到的GUI源码框架中都有的,就是node和子node的归递扫描然后draw。另外一个就是surface显示区的概念,用来透明合并多重frame。
我都是围绕图像相关的学习,没跑题吧!喜欢这样360度的学习,因为当我在看似不同的项目中看到了相同之处,那么这就是精华。看来我已经掌握了GUI的基于事件响应的大框架设计。

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

推荐阅读更多精彩内容