CCTMXTiledMap的使用

简介:  1 CCTMXTiledMap的使用 TileMap.h #ifndef __T23TileMap_H__ #define __T23TileMap_H__   #include "cocos2d.h" USING_NS_CC;   class TileMap :public


1 CCTMXTiledMap的使用

TileMap.h

#ifndef __T23TileMap_H__

#define __T23TileMap_H__

 

#include "cocos2d.h"

USING_NS_CC;

 

class TileMap :public CCLayer

{

public:

    CREATE_FUNC(TileMap);

    bool init();

    static CCScene * scene();

 

    CCTMXTiledMap* _map;

    CCPoint Point2Tile(CCPoint ptGL);

    CCPoint Tile2PointLB(CCPoint ptTile);

 

    bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);

};

 

#endif

TileMap.cpp

#include "TileMap.h"

 

CCScene * TileMap::scene()

{

    CCScene * scene = CCScene::create();

    TileMap * layer = TileMap::create();

    scene->addChild(layer);

    return scene;

}

 

bool TileMap::init()

{

    CCScene * scene = CCScene::create();

    //初始化TMXTiledMap,要用一个.tmx

    CCTMXTiledMap * map = CCTMXTiledMap::create("Round1.tmx");

    addChild(map);

 

    //获得CCTMXLayer的层:layer_0

    CCTMXLayer* layer = map->layerNamed("layer_0");

    //通过tileAt的方式获得格子,每个格子是一个精灵

    CCSprite* sprite = layer->tileAt(ccp(2,2));

    //通过tileGIDAT的方式获得gid的值

    int gid = layer->tileGIDAt(ccp(2,2));

    //让被选中的精灵跳动一下

    sprite->runAction(CCJumpBy::create(200, ccp(0, 0), 50, 1000));

 

    //将地图缩放

    map->setScale(.5f);

    layer->setTileGID(3,ccp(3,3));

 

    _map = map;

 

    setTouchEnabled(true);

    //设置触摸方式

    setTouchMode(kCCTouchesOneByOne);

 

    CCSprite* sprite1 = CCSprite::create("anchor3.png");

    _map->addChild(sprite1);

    sprite1->setZOrder(1000);

 

    sprite1->setPosition(Tile2PointLB(ccp(3, 2)));

    sprite1->setAnchorPoint(ccp(0,1));

 

    sprite1->setPosition(Tile2PointLB(ccp(3, 2)));

    sprite1->setAnchorPoint(ccp(0,1));

 

    return true;

}

 

//将世界坐标转换成格子坐标

CCPoint TileMap::Point2Tile(CCPoint ptGL)

{

    //获得每个格子的宽度

    int dx = _map->getTileSize().width;

    //设置每个格子的高度

    int dy = _map->getTileSize().height;

 

    //ptGL世界坐标转换成为本地坐标

    CCPoint ptMap = _map->convertToNodeSpace(ptGL);

    //x轴方向的格子数

    int x = ptMap.x / dx;

    //这里如果是最左下角算的的值是0,如果y轴上有2个格子,实际的格子的y1

    int y = ptMap.y / dy;

    //y方向上的总格子数 - 1 - y

    y = _map->getMapSize().height - 1 - y;

 

    return ccp(x,y);

}

 

//将格子坐标转换成为世界坐标

CCPoint TileMap::Tile2PointLB(CCPoint ptTile)

{

    //这里的getMapSize().height不是像素值,而是y方向上的格子数

    ptTile.y = _map->getMapSize().height - 1 - ptTile.y;

 

    return ccp(ptTile.x * _map->getTileSize().width,

        ptTile.y * _map->getTileSize().height);

}

 

bool TileMap::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)

{

    //获得被选中的坐标值

    CCPoint pt = pTouch->getLocation();

 

    CCPoint ptTile = Point2Tile(pt);

    _map->layerNamed("layer_0")->setTileGID(0, ptTile);

 

    return true;

}

运行结果:

 

目录
相关文章
|
XML 前端开发 数据可视化
Android View使用、自定义和性能优化
View的继承关系 创建View对象 使用XML布局定义View,再用代码控制View 举例 1.创建activity_view.xml文件 2.加载布局文件、关联控件 3.在获得XML布局文件中的视图对象时需要注意下面几点: 4.用代码控制视图 使用代码的方式来创建View对象 实例 1.获得当前的容器视图对象 2.获得或创建待添加的视图对象 3.将相应的视图对象添加到容器视图中 总结 自定义View 为什么要自定义View 自定义View的基本方法 需要用到的两个对象 自绘控件View实例 1、直接继承View类 2、在布局 XML 文件中使用自定义View 性能优化
273 0
Android View使用、自定义和性能优化
|
20小时前
|
存储 关系型数据库 MySQL
数据管理的艺术:PolarDB开源版详评与实战部署策略(一)
PolarDB-X是阿里巴巴自研的高性能云原生分布式数据库,基于共享存储的Shared-nothing架构,支持MySQL生态,具备金融级高可用、分布式水平扩展、HTAP混合负载等能力。它通过CN(计算节点)和DN(存储节点)实现计算与存储分离,保证数据强一致性,并支持全局二级索引和多主多写。PolarDB-X开源版提供更高程度的定制化和控制权,适合追求技术自主性和成本优化的开发者。部署方式包括RPM包、PXD工具和Kubernetes,其中PXD工具提供了一键部署的便利性。
34595 10
|
4天前
|
关系型数据库 Serverless 分布式数据库
高峰无忧,探索PolarDB PG版Serverless的弹性魅力
在数字经济时代,数据库成为企业命脉,面对爆炸式增长的数据,企业面临管理挑战。云原生和Serverless技术革新数据库领域,PolarDB PG Serverless作为阿里云的云原生数据库解决方案,融合Serverless与PostgreSQL,实现自动弹性扩展,按需计费,降低运维成本。它通过计算与存储分离技术,提供高可用性、灾备策略和简化运维。PolarDB PG Serverless智能应变业务峰值,实时监控与调整资源,确保性能稳定。通过免费体验,用户可观察其弹性性能和价格力,感受技术优势。
|
14天前
|
存储 缓存 监控
你的Redis真的变慢了吗?性能优化如何做
本文先讲述了Redis变慢的判别方法,后面讲述了如何提升性能。
102230 4
|
14天前
|
机器学习/深度学习 并行计算 算法
Transformer 一起动手编码学原理
学习Transformer,快来跟着作者动手写一个。
94247 8
|
13天前
|
存储 SQL Apache
阿里云数据库内核 Apache Doris 基于 Workload Group 的负载隔离能力解读
阿里云数据库内核 Apache Doris 基于 Workload Group 的负载隔离能力解读
阿里云数据库内核 Apache Doris 基于 Workload Group 的负载隔离能力解读
|
19天前
|
人工智能 弹性计算 算法
一文解读:阿里云AI基础设施的演进与挑战
对于如何更好地释放云上性能助力AIGC应用创新?“阿里云弹性计算为云上客户提供了ECS GPU DeepGPU增强工具包,帮助用户在云上高效地构建AI训练和AI推理基础设施,从而提高算力利用效率。”李鹏介绍到。目前,阿里云ECS DeepGPU已经帮助众多客户实现性能的大幅提升。其中,LLM微调训练场景下性能最高可提升80%,Stable Difussion推理场景下性能最高可提升60%。
123978 31
|
14天前
|
存储 弹性计算 Cloud Native
1 名工程师轻松管理 20 个工作流,创业企业用 Serverless 让数据处理流程提效
为应对挑战,语势科技采用云工作流CloudFlow和函数计算FC,实现数据处理流程的高效管理与弹性伸缩,提升整体研发效能。
64746 2
|
20天前
|
消息中间件 安全 API
Apache RocketMQ ACL 2.0 全新升级
RocketMQ ACL 2.0 不管是在模型设计、可扩展性方面,还是安全性和性能方面都进行了全新的升级。旨在能够为用户提供精细化的访问控制,同时,简化权限的配置流程。欢迎大家尝试体验新版本,并应用在生产环境中。
187546 20
|
16天前
|
存储 关系型数据库 数据库