【cocos2dx 3.2】瓦片地图制作
使用Tiled编辑地图
- 每个图层仅仅能放一种瓦片
- 瓦片的大小最好是32*32的倍数
- 对象层里面设置路径的坐标
- 主程序中获取对象层中的坐标,做对应的操作
设置口袋精灵类:
Monster.h
#include "cocos2d.h" USING_NS_CC; class Monster : public Sprite
{
public:
virtual bool init(Vector<Node*> points);
static Monster* create(Vector<Node*> points); //用于获取对象层的坐标
Vector<Node*> p;
Vector<Node*>::iterator start; //精灵
Sprite *s; //依照路径移动
void moveByPath(); //种类随机数
int ranNum; };
Monster.cpp
#include "Monster.h" Monster* Monster::create(Vector<Node*> points)
{
auto monster = new Monster();
monster->init(points);
monster->autorelease();
return monster;
} bool Monster::init(Vector<Node*> points)
{
Sprite::init(); //设置随机数,控制出场精灵种类
srand(time(NULL));
ranNum = rand()%5; p = points;
start = p.begin(); switch (ranNum)
{
case 0 :
{
s = Sprite::create("1.png");
break;
}
case 1:
{
s = Sprite::create("2.png");
break;
}
case 2:
{
s = Sprite::create("3.png");
break;
}
case 3:
{
s = Sprite::create("4.png");
break;
}
case 4:
{
s = Sprite::create("5.png");
break;
}
}
s->setPosition((*start)->getPosition());
addChild(s); return true;
} //沿着路径移动
void Monster::moveByPath(){
++start;
if(start == p.end()){
s->removeFromParent();
}
else{
Point a = Point((*start)->getPosition());
s->runAction(Sequence::create(MoveTo::create(2,a),CallFuncN::create(CC_CALLBACK_0(Monster::moveByPath,this)),NULL));
}
}
主场景类
HelloWorldScene.h
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__ #include "cocos2d.h"
#include "Monster.h" USING_NS_CC; class HelloWorld : public cocos2d::LayerColor
{
public: static cocos2d::Scene* createScene();
virtual bool init();
CREATE_FUNC(HelloWorld); void menuCloseCallback(cocos2d::Ref* pSender); //存放对象层里的坐标
Vector<Node*> points;
Vector<Node*>::iterator startPoint; //加入物体
void addMonster(); //用于控制时间间隔
int oldTime;
int curTime;
void resetTime(); void update(float dt); //精灵
Sprite *s; }; #endif // __HELLOWORLD_SCENE_H__
HelloWorldScene.cpp
#include "HelloWorldScene.h" USING_NS_CC; Scene* HelloWorld::createScene()
{ auto scene = Scene::createWithPhysics(); auto layer = HelloWorld::create(); scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
scene->getPhysicsWorld()->setGravity(Point(0,-1000)); scene->addChild(layer); return scene;
} // on "init" you need to initialize your instance
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !LayerColor::initWithColor(Color4B(255,255,255,255)) )
{
return false;
} Size visibleSize = Director::getInstance()->getVisibleSize();
Point origin = Director::getInstance()->getVisibleOrigin(); //加入物理边界
auto body = PhysicsBody::createEdgeBox(visibleSize,PHYSICSBODY_MATERIAL_DEFAULT,3);
auto node = Node::create();
node->setPhysicsBody(body);
node->setPosition(visibleSize.width/2,visibleSize.height/2);
addChild(node); //加入地图文件
auto map = TMXTiledMap::create("pokamon.tmx");
map->setPosition(200,0);
addChild(map); //获得对象层中的坐标,存在向量里
TMXObjectGroup* objectGroup = map->getObjectGroup("monster");
ValueVector object = objectGroup->getObjects(); for (ValueVector::iterator it = object.begin(); it != object.end(); it++) {
Value obj = *it;
ValueMap m = obj.asValueMap();
auto node = Node::create();
node->setPosition(m.at("x").asFloat()+200,m.at("y").asFloat());
points.pushBack(node);
} //重置时间
resetTime(); //开启计时器
scheduleUpdate(); return true;
} void HelloWorld::update(float dt)
{
++oldTime;
if (oldTime == curTime)
{
resetTime();
addMonster();
}
} void HelloWorld::resetTime()
{
oldTime = 0;
curTime = 40;
} void HelloWorld::addMonster()
{
auto hero = Monster::create(points);
hero->moveByPath();
addChild(hero);
} void HelloWorld::menuCloseCallback(Ref* pSender)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
return;
#endif Director::getInstance()->end(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}
效果:
【cocos2dx 3.2】瓦片地图制作的更多相关文章
- Cocos2d-X研究之v3.x瓦片地图具体解释
在游戏开发过程中,我们会遇到超过屏幕大小的地图,比如即时战略游戏,使得玩家能够在地图中滚动游戏画面.这类游戏一般会有丰富的背景元素,假设直接使用背景图切换的方式,须要为每一个不同的场景准备一张背景图, ...
- 关于Cocos2d-x的瓦片地图
1.cocos2d-x的瓦片地图是用Tiled地图编辑器做的,这个软件开源,免费,一般都是用它制作瓦片地图. 2.瓦片地图是由块层和对象组成的,块层的作用是显示和一些重叠的时候覆盖角色的作用,而对象是 ...
- Cocos2d-x使用瓦片地图
图所示的复杂地图可以使用瓦片地图技术,瓦片地图是用一些小图片(瓦片)拼接而成,这样可以大大地减少内存消耗.如图所示的瓦片地图,只需要如图所示的三个瓦片就可以了. 瓦片地图 地图中的瓦片 瓦片地图的分类 ...
- cocos2dx进阶学习之瓦片地图编辑器
之前学习了瓦片地图类,现在我们来学习下瓦片地图制作工具 这个是开源的工具,可以从网上下载,下面我们演示下怎么做地图 步骤1 将需要用到的图片放到一个目录下,比如我机器上就是d:\tiled,这些图片是 ...
- cocos2d-x中的Tiled地图
cocos2d-x中的瓦片地图是通过tiledMap软件制作的,存档格式是.tmx格式.此软件的使用步骤简单总结如下: (1)制作瓦片地图 1 打开软件,软件界面如下图. 2. 新建地图(文件-> ...
- [SpriteKit] 制作瓦片地图小游戏
概述 SpriteKit制作瓦片地图游戏,深入了解2D游戏制作过程 详细 代码下载:http://www.demodashi.com/demo/10703.html 说实话这个2D游戏实战的入门看的我 ...
- Cocos2d-JS中瓦片地图API
为了访问瓦片地图,Cocos2d-JS中访问瓦片地图API,主要的类有:TMXTiledMap.TMXLayer和TMXObjectGroup等.1.TMXTiledMapTMXTiledMap是瓦片 ...
- android瓦片地图技术研究
最近根据公司项目需求,需要制作场馆的室内图并且实现根据rfid信号的自动定位功能,研究了好久找到了一个目前为止还算好用的瓦片地图工具——TileView. github连接:https://githu ...
- Google Map API V3调用arcgis发布的瓦片地图服务
由于最近项目需要用到CAD制作的地图,但之前一直使用的是用谷歌离线瓦片地图的方式,怎么样把CAD图像地图一样有缩放,移动的功能放到网页显示成了难题, 原先的谷歌地图的代码难道就不能用了?重新写一套代码 ...
随机推荐
- InstallShield详细制作说明(一)
虽然网上关于InstallShield的制作说明已经很多,但是看的时候还是会有些晕乎乎的,不得不说很复杂.前段时候做了一次,后面需要升级,在重新做的时候发现有些地方自己又忘了,所以有必须将自己看的教程 ...
- Keil 编译环境之在线仿真调试问题
一.问题现象: 这几天刚开始上手STM32,使用Keil 环境进行编程,然后使用ULINK2进行在线仿真,在按键处理函数程序中设置断点,却发现按了按键程序没有停在设置的断点,程序正常运行,如下图所示, ...
- 洛谷 P1054 等价表达式
洛谷 P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式, ...
- 84.setlocale
用法示例 #include <Windows.h> #include <stdio.h> #include<locale.h> void main() { //se ...
- rhel5安装 oracle10
readhat 安装11gr2文档 需要注意的地方:必须关掉的 1,防火墙:2,SElinux . root 用户运行 setup 命令可关防火墙与SElinux 修改网络配置文件,一定要重启此文 ...
- SqlMapConfig.xml全局配置文件解析(mybatis)
原文 http://www.cnblogs.com/selene/p/4607004.html 一:SqlMapConfig.xml配置文件的内容和配置顺序如下 properties(属性) set ...
- git在本地分支上 git pull远程分支时,状况
git 在pull或者合并分支的时候有时会遇到这个界面.可以不管(直接下面3,4步),如果要输入解释的话就需要: 1.按键盘字母 i 进入insert模式 2.修改最上面那行黄色合并信息,可以不修改 ...
- 深度解析VC中的消息
消息是指什么? 消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向Windows发出一个通知,告诉应用程序某个事情 ...
- 洛谷 P1727 计算π
P1727 计算π 题目背景 <爱与愁的故事第二弹·compute>第一章. 题目描述 中秋至,博饼声铿锵不断.爱与愁大神兴致勃勃地到学校博饼,结果抱回家的只有一秀二举.爱与愁大神十分生气 ...
- 洛谷 P1192 台阶问题
P1192 台阶问题 题目描述 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式. 输入输出格式 输入格式: 输入文件的仅包含两个正整数N,K. ...