【cocos2d-x 3D实战】开发一款体素游戏--1. 准备工作

本系列文章记录下使用cocos2d-x开发一款体素风游戏的过程,遇到的问题,解决办法及收获。使用了cocos2d-x的3D功能,以下简称c3d

前言

最近cocos官网推荐了一款使用cocos2d-x开发的3D游戏,叫《Steps》(信步),是一个乌克兰小伙的作品,是一款休闲小游戏,正是类似MineCraft那种体素(voxel)风格的,看起来效果还不错,于是自己也打算尝试搞一个这样的游戏玩玩。

本文是使用c3d开发一款体素风游戏系列的第一篇,记录了开发环境的配置和界面编辑器的选择和实验。

1. 新建cocos工程

使用cocos命令行工具创建即可,建议使用lua类型,因为对3D效果的调试可能要频繁修改UI部分要频繁重启游戏。

2. 模型创建和导出

使用MagicaVoxel创建出一个3D小汽车,如下图所示:

在这里插入图片描述

MagicaVoxel比较容易上手,

画刷工具有六种,

  • L 画线

  • C 圆

  • P

  • V 自由矢量

  • F 面

  • B 方块

画刷操作类型有四种:

  • Attach 附加

  • Erase 擦除

  • Paint 画 (覆盖原体素)

  • Move 整体移动

自己都实践操作下就知道其中区别了

YouTube上有很多系列教程,跟着视频操作很快就能上手,这里的小汽车画法是模仿下面这个视频来操作的:

MagicaVoxel | Tutoriel FR - #2 Construisons !

3. 在cocos中加载模型、展示场景

c3d支持MagicaVoxel导出的obj格式文件,同时还支持c3b, c3t两种模型格式文件后两者是通过把fbx-conv工具由fbx文件转换而来,在cocos中使用c3b和c3t格式模型可以支持动画等特性,而直接使用obj的话不能播放动画。本文暂时直接加载obj文件,后面会使用Blender把obj转为fbx,再通过fbx-conv转换为c3b和c3t, 以便于在cocos中播放3D动画等功能。

为了简单,我直接在cpp里建了个Layer,加载上一步导出的car1.obj:

#include "3d/House.h"

USING_NS_CC;

bool House::init() {
    if (Layer::init()) {
        loadModel();
        setCamera();
        return true;
    }
    return false;
}


void House::loadModel() {
    const char *modelName = "3d/car1.obj";
    auto house = Sprite3D::create(modelName);
    house->setCameraMask((unsigned int)CameraFlag::USER1);
    addChild(house);
}

void House::setCamera() {
    auto size = Director::getInstance()->getVisibleSize();
    auto camera = Camera::createPerspective(60.0, size.width / size.height, 10, 100);
    camera->setCameraFlag(CameraFlag::USER1);
    camera->setGlobalZOrder(10);
    camera->setPosition3D(Vec3(40, 40, -20));
    camera->lookAt(Vec3(0, 0, 0), Vec3(0, 1, 0));
    addChild(camera);
}

效果图:

在这里插入图片描述

在下一篇文章中再加入调整摄像机的视角的触摸响应函数。


作者水平有限,对相关知识的理解和总结难免有错误,还望给予指正,非常感谢!

在这里也能看到这篇文章:github博客, CSDN博客, 欢迎访问

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值