cocos2d-x魔塔源代码

  • k5_507062
    了解作者
  • 1.8MB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-07 09:51
    上传日期
基于cocos2d-x手机游戏魔塔源代码
MTGame.rar
  • MTGame
  • proj.win32
  • res
  • MTGame.ico
    46.5KB
  • Release.win32
  • GameLayer.obj
    31.9KB
  • cl.command.1.tlog
    24.5KB
  • MTGame.res
    47.3KB
  • rc.command.1.tlog
    628B
  • CL.read.1.tlog
    482.2KB
  • mt.read.1.tlog
    1.5KB
  • NPC.obj
    32.2KB
  • link-cvtres.read.1.tlog
    2B
  • link.read.1.tlog
    6.9KB
  • MTGame.win32.log
    6.1KB
  • 魔塔.lastbuildstate
    52B
  • rc.read.1.tlog
    2.6KB
  • link.write.1.tlog
    2.4KB
  • CL.write.1.tlog
    3.7KB
  • Enemy.obj
    14.7KB
  • 魔塔.exe.intermediate.manifest
    381B
  • main.obj
    12.1KB
  • link.command.1.tlog
    4.2KB
  • Item.obj
    14.6KB
  • GameScene.obj
    24.7KB
  • Teleport.obj
    30.8KB
  • mt.write.1.tlog
    290B
  • AnimationManager.obj
    24.4KB
  • GameMap.obj
    49.4KB
  • Global.obj
    12.6KB
  • Hero.obj
    40.9KB
  • AstarNode.obj
    20.3KB
  • Astar.obj
    20.9KB
  • ControlLayer.obj
    30.9KB
  • mt.command.1.tlog
    450B
  • rc.write.1.tlog
    268B
  • AppDelegate.obj
    22.9KB
  • link-cvtres.write.1.tlog
    2B
  • Debug.win32
  • GameLayer.obj
    124.5KB
  • cl.command.1.tlog
    113.7KB
  • MTGame.res
    47.3KB
  • rc.command.1.tlog
    5.6KB
  • CL.read.1.tlog
    2.2MB
  • link.860-cvtres.read.1.tlog
    2B
  • vc100.idb
    4MB
  • mt.read.1.tlog
    1.2KB
  • NPC.obj
    149.9KB
  • MTGame.win32.Build.CppClean.log
    5.1KB
  • link-cvtres.read.1.tlog
    2B
  • link.read.1.tlog
    17.5KB
  • MTGame.win32.log
    4KB
  • link.3256.write.1.tlog
    2B
  • 魔塔_manifest.rc
    206B
  • 魔塔.lastbuildstate
    75B
  • rc.read.1.tlog
    13.4KB
  • link.5680-cvtres.read.1.tlog
    2B
  • link.write.1.tlog
    7KB
  • MTGame.win32.lastbuildstate
    50B
  • link.860.write.1.tlog
    2B
  • CL.write.1.tlog
    38KB
  • Enemy.obj
    87KB
  • link.860.read.1.tlog
    2B
  • MTGame.win32.exe.intermediate.manifest
    381B
  • link.3256-cvtres.read.1.tlog
    2B
  • MTGame.win32.exe.embed.manifest.res
    472B
  • 魔塔.exe.intermediate.manifest
    381B
  • vc100.pdb
    812KB
  • MTGame.win32_manifest.rc
    226B
  • main.obj
    41.3KB
  • link.3256.read.1.tlog
    2B
  • link.command.1.tlog
    10.5KB
  • Item.obj
    84.8KB
  • link.5680-cvtres.write.1.tlog
    2B
  • link.3256-cvtres.write.1.tlog
    2B
  • GameScene.obj
    107.4KB
  • Teleport.obj
    146.4KB
  • mt.write.1.tlog
    694B
  • 魔塔.exe.embed.manifest.res
    472B
  • AnimationManager.obj
    116.7KB
  • link.5680.read.1.tlog
    2B
  • GameMap.obj
    185.9KB
  • 魔塔.exe.embed.manifest
    406B
  • link.5680.write.1.tlog
    2B
  • Global.obj
    86.7KB
  • Hero.obj
    149.8KB
  • link.860-cvtres.write.1.tlog
    2B
  • AstarNode.obj
    92.3KB
  • Astar.obj
    109.6KB
  • ControlLayer.obj
    122.3KB
  • mt.command.1.tlog
    926B
  • MTGame.win32.exe.embed.manifest
    406B
  • rc.write.1.tlog
    2.7KB
  • AppDelegate.obj
    102.9KB
  • link-cvtres.write.1.tlog
    2B
  • resource.h
    492B
  • MTGame.win32.vcxproj.user
    763B
  • MTGame.win32.vcxproj.filters
    6.7KB
  • main.cpp
    860B
  • MTGame.win32.vcxproj
    10.4KB
内容介绍
#include "Hero.h" Hero::Hero() { sGlobal->hero = this; speed = 0.05f; } Hero::~Hero() { } //静态方法,用于生成Hero实例 Hero* Hero::heroWithinLayer() { //new一个对象 Hero *pRet = new Hero(); //调用init方法 if (pRet && pRet->heroInit()) { //将实例放入autorelease池,统一由引擎控制对象的生命周期 pRet->autorelease(); return pRet; } CC_SAFE_DELETE(pRet); return NULL; } bool Hero::heroInit() { //根据向下行走动画的第一帧创建精灵; CCAnimationFrame* cf = (CCAnimationFrame*)sAnimationMgr->getAnimation(kDown)->getFrames()->objectAtIndex(0); CCSpriteFrame* ccsp = cf->getSpriteFrame(); heroSprite = CCSprite::createWithSpriteFrame(ccsp); //设置锚点 heroSprite->setAnchorPoint(CCPointZero); //将用于显示的heroSprite加到自己的节点下 this->addChild(heroSprite); //创建空的战斗动画精灵 fightSprite = new CCSprite(); //手动设置fightSprite为autorelease fightSprite->autorelease(); fightSprite->init(); fightSprite->setVisible(false); this->addChild(fightSprite); //一开始不处于move状态。 isHeroMoving = false; isHeroFighting = false; isDoorOpening = false; return true; } void Hero::move(HeroDirection direction) { if (isHeroMoving) return; //移动的距离 CCPoint moveByPosition; //根据方向计算移动的距离 switch (direction) { case kDown: moveByPosition = ccp(0, -32); break; case kLeft: moveByPosition = ccp(-32, 0); break; case kRight: moveByPosition = ccp(32, 0); break; case kUp: moveByPosition = ccp(0, 32); break; default: return; } //计算目标坐标,用当前勇士坐标加上移动距离 targetPosition = ccpAdd(this->getPosition(), moveByPosition); //调用checkCollision检测碰撞类型,如果是墙壁、怪物、门,则只需要设置勇士的朝向 CollisionType collisionType = checkCollision(targetPosition); if (collisionType == kWall || collisionType == kEnemy || collisionType == kDoor || collisionType == kNPC) { setFaceDirection((HeroDirection)direction); return; } //heroSprite仅播放行走动画 heroSprite->runAction(sAnimationMgr->createAnimate(direction)); //主体进行位移,结束时调用onMoveDone方法 CCSequence *action = CCSequence::createWithTwoActions( CCMoveBy::create(speed, moveByPosition), //把方向信息传递给onMoveDone方法 CCCallFuncND::create(this, callfuncND_selector(Hero::onMoveDone), (void*)direction) ); this->runAction(action); isHeroMoving = true; } void Hero::onMoveDone(CCNode* pTarget, void* data) { //将void*先转换为int,再从int转换到枚举类型 int direction = (int) data; setFaceDirection((HeroDirection)direction); isHeroMoving = false; sGlobal->gameLayer->setSceneScrollPosition(this->getPosition()); } void Hero::setFaceDirection(HeroDirection direction) { heroSprite->setTextureRect(CCRectMake(0,32*direction,32,32)); } //判断碰撞类型 CollisionType Hero::checkCollision(CCPoint heroPosition) { //cocos2d-x坐标转换为Tilemap坐标 targetTileCoord = sGlobal->gameMap->tileCoordForPosition(heroPosition); //如果勇士坐标超过地图边界,返回kWall类型,阻止其移动 if (heroPosition.x < 0 || targetTileCoord.x > sGlobal->gameMap->getMapSize().width - 1 || targetTileCoord.y < 0 || targetTileCoord.y > sGlobal->gameMap->getMapSize().height - 1) return kWall; //获取墙壁层对应坐标的图块ID int targetTileGID = sGlobal->gameMap->getWallLayer()->tileGIDAt(targetTileCoord); //如果图块ID不为0,表示有墙 if (targetTileGID) { return kWall; } //获取怪物层对应坐标的图块ID targetTileGID = sGlobal->gameMap->getEnemyLayer()->tileGIDAt(targetTileCoord); //如果图块ID不为0,表示有怪物 if (targetTileGID) { //开始战斗 fight(); return kEnemy; } //获取物品层对应坐标的图块ID targetTileGID = sGlobal->gameMap->getItemLayer()->tileGIDAt(targetTileCoord); //如果图块ID不为0,表示有物品 if (targetTileGID) { //拾取物品 pickUpItem(); return kItem; } //获取门层对应坐标的图块ID targetTileGID = sGlobal->gameMap->getDoorLayer()->tileGIDAt(targetTileCoord); //如果图块ID不为0,表示有门 if (targetTileGID) { //打开门 openDoor(targetTileGID); return kDoor; } //从npc字典中查询 int index = targetTileCoord.x + targetTileCoord.y * sGlobal->gameMap->getMapSize().width; NPC *npc = (NPC*)(sGlobal->gameMap->npcDict->objectForKey(index)); if (npc != NULL) { actWithNPC(); return kNPC; } //从Teleport字典中查询 Teleport *teleport = (Teleport*)sGlobal->gameMap->teleportDict->objectForKey(index); if (teleport != NULL) { doTeleport(teleport); return kTeleport; } //可以通行 return kNone; } CollisionType Hero::checkCollisionOnly(CCPoint heroPosition){ //cocos2d-x坐标转换为Tilemap坐标 CCPoint targetTileCoord = sGlobal->gameMap->tileCoordForPosition(heroPosition); //如果勇士坐标超过地图边界,返回kWall类型,阻止其移动 if (heroPosition.x < 0 || targetTileCoord.x > sGlobal->gameMap->getMapSize().width - 1 || targetTileCoord.y < 0 || targetTileCoord.y > sGlobal->gameMap->getMapSize().height - 1) return kWall; //获取墙壁层对应坐标的图块ID int targetTileGID = sGlobal->gameMap->getWallLayer()->tileGIDAt(targetTileCoord); //如果图块ID不为0,表示有墙 if (targetTileGID) { return kWall; } //获取怪物层对应坐标的图块ID targetTileGID = sGlobal->gameMap->getEnemyLayer()->tileGIDAt(targetTileCoord); //如果图块ID不为0,表示有怪物 if (targetTileGID) { return kEnemy; } //获取物品层对应坐标的图块ID targetTileGID = sGlobal->gameMap->getItemLayer()->tileGIDAt(targetTileCoord); //如果图块ID不为0,表示有物品 if (targetTileGID) { return kItem; } //获取门层对应坐标的图块ID targetTileGID = sGlobal->gameMap->getDoorLayer()->tileGIDAt(targetTileCoord); //如果图块ID不为0,表示有门 if (targetTileGID) { return kDoor; } //从npc字典中查询 int index = targetTileCoord.x + targetTileCoord.y * sGlobal->gameMap->getMapSize().width; NPC *npc = (NPC*)(sGlobal->gameMap->npcDict->objectForKey(index)); if (npc != NULL) { return kNPC; } //从Teleport字典中查询 Teleport *teleport = (Teleport*)sGlobal->gameMap->teleportDict->objectForKey(index); if (teleport != NULL) { return kTeleport; } //可以通行 return kNone; } //开始战斗 void Hero::fight() { //已经在战斗中,避免重复战斗 if (isHeroFighting) return; isHeroFighting = true; //显示怪物受到打击的效果 sGlobal->gameMap->showEnemyHitEffect(targetTileCoord); //显示损失的生命值,先用假数据替代一下 char temp[30] = {0}; sprintf(temp, "lost hp: -%d", 100); sGlobal->gameLayer->showTip(temp, getPosition()); //将用于显示战斗动画的精灵设置为可见 fightSprite->setVisible(true); //计算显示战斗动画的位置为勇士和怪物的中间点 CCPoint pos = ccp((targetPosition.x - getPosition().x) / 2 + 16, (targetPosition.y - getPosition().y) / 2 + 16); fightSprite->setPosition(pos); //创建战斗动画 CCAnimate* cca = sAnimationMgr->createAnimate(aFight); CCCallFuncN* ccf = CCCallFuncN::create(this,callfuncN_selector(Hero::onFightDone)); CCSequence* action = CCSequence::createWithTwoActions(cca,ccf); fightSprite->runAction(action); } //战斗结束的回调 void Hero::onFightDone(CCNode* pSender) { //删除怪物对应的图块,表示已经被消灭 sGlobal->gameMap->getEnemyLayer()->removeTileAt(targetTileCoord); fightSprite->setVisible(false); isHeroFighting = false; } //拾取物品 void Hero::pickUpItem() { //显示提示消息 sGl
评论
    相关推荐
    • Cocos2d Game
      I create a Cocos2d game
    • cocos2d富文本
      cocos2d 富文本实现 格式 [i:图片路径|-] [s:22|c:00ff00ff]***[-] [s:22]***[-] [l:item/1001]...[-] 随意组合嵌套
    • Cocos2d学习文档
      Cocos2d学习文档 适合新手 第1章-介绍cocos2d.pdf 第2章-开始学习.pdf 。。。。 第4章-你的第一个游戏(修正错误).pdf 。。。。
    • Cocos2d学习资料
      Cocos2D目录: 第一章:介绍Cocos2d 第二章: 开始学习 第三章: 基础知识 第四章: 你的第一个游戏(修正错误) 第五章: 游戏构成要素 第六章: 深入了解精灵(Sprite) 第七章: 横向滚屏射击游戏 第八章: 完成滚屏射击游戏...
    • cocos2d demo
      本资源是一个小的经典的cocos2d-x的demo,后续每周更新增加功能的版本
    • cocos2d精灵教程
      (译)cocos2d精灵教程:第一部分.pdf (译)cocos2d精灵教程:第三部分.pdf (译)cocos2d精灵教程:第二部分.pdf (译)cocos2d菜单教程:第一部分.pdf (译)cocos2d菜单教程:第三部分(完).pdf (译)...
    • cocos2d模板
      cocos2d-template-updated
    • Cocos2d手势
      为实现Cocos2d手势支持,改写的CCLayer、CCNode、CCGestureRecognizer三个源码类,可以参考我博客使用!
    • Cocos2D文档
      Cocos2D开发参考文档 Cocos2D帮助文档
    • cocos2d实例
      cocos的一些实例代码,有助于初学者。