void MyScene::onTouchMoved(Touch* pTouch, Event* pEvent){ CCTMXTiledMap* pTmap = (CCTMXTiledMap*)pJYPlayerDragon->getCCObject()->getParent(); CCPoint diff = pTouch->getDelta(); CCPoint currentPos = backgroundNode->getPosition(); CCPoint newPos = currentPos + diff; if (newPos.x < 0) newPos.x = 0; if (newPos.x + pTmap->getContentSize().width >= winSize.width) newPos.x = winSize.width - pTmap->getContentSize().width; if (newPos.y < 0) newPos.y = 0; if (newPos.y + pTmap->getContentSize().height >= winSize.height) newPos.y = winSize.height - pTmap->getContentSize().height; backgroundNode->setPosition(newPos); CCLOG("changed pos : %f %f", backgroundNode->getPosition().x, backgroundNode->getPosition().y); }
//------------------------------------------------------------------ // // TMXOrthoTest // //------------------------------------------------------------------ TMXOrthoTest::TMXOrthoTest() { // // Test orthogonal with 3d camera and anti-alias textures // // it should not flicker. No artifacts should appear // //CCLayerColor* color = CCLayerColor::create( ccc4(64,64,64,255) ); //addChild(color, -1); CCTMXTiledMap* map = CCTMXTiledMap::create("TileMaps/orthogonal-test2.tmx"); addChild(map, 0, kTagTileMap); CCSize s = map->getContentSize(); CCLOG("ContentSize: %f, %f", s.width,s.height); CCArray * pChildrenArray = map->getChildren(); CCSpriteBatchNode* child = NULL; CCObject* pObject = NULL; CCARRAY_FOREACH(pChildrenArray, pObject) { child = (CCSpriteBatchNode*)pObject; if(!child) break; child->getTexture()->setAntiAliasTexParameters(); }
// on "init" you need to initialize your instance bool MapScene::init() { if ( !CCLayer::init() ) { return false; } //初始化地图 CCTMXTiledMap *map = CCTMXTiledMap::create("iso-test-zorder.tmx"); addChild(map, 0, kTagTileMap); CCSize s = map->getContentSize(); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); ////----UXLOG("ContentSize: %f, %f", s.width,s.height); map->setPosition(ccp(-s.width/2 + winSize.width/2,0)); //初始化人物 m_tamara = CCSprite::create("grossinis_sister1.png"); map->addChild(m_tamara, map->getChildren()->count() ); m_tamara->retain(); int mapWidth = map->getMapSize().width * map->getTileSize().width; int mapHeight = map->getMapSize().height * map->getTileSize().height; m_tamara->setPosition(ccp( mapWidth/2,112)); m_tamara->setAnchorPoint(ccp(0.5f,0)); setTouchEnabled(true); scheduleUpdate(); vmove = -1; hmove = -1; stepindex = -1; myastar = new Astar(); return true; }
bool CityScene::init() { TileMapInfo* tileMapInfo = TileMapInfo::createMapInfoWithFile("Round1.tmx"); CCTMXTiledMap* tmxTileMap = tileMapInfo->getTileMap(); this->addChild(tmxTileMap); mPlayerTank[0] = Tank::createTankWithTankType("player2U.png", tileMapInfo); //将地图放到屏幕中间 CCSize tileSize = tmxTileMap->getTileSize(); CCSize mapSize = tmxTileMap->getContentSize(); mPlayerTank[0]->setPosition(ccp(mapSize.width / 2 - tileSize.width * 3, tileSize.height)); //将坦克缩放到合适大小,然后放到地图中合适位置 /*CCSize tileSize = tmxFile->getTileSize(); Tank* tank = Tank::createTankWithTankType("player2U.png"); mPlayerTank[0] = tank; CCSize tankSize = tank->getContentSize(); tank->setScaleX(tileSize.width*2/tankSize.width); tank->setScaleY(tileSize.height*2/tankSize.height); tank->setPosition(ccp(winSize.width/2 - tileSize.width*2, tileSize.height)); this->addChild(tank);*/ //添加手柄 mLayerPanel = Panel::create(); addChild(mLayerPanel, 3); return true; }
bool CityScene::init() { CCLayer::init(); //初始化地图信息 char szRound[260]; sprintf(szRound, "Round%d.tmx", mRound); TileMapInfo* tileMapInfo = TileMapInfo::createMapInfoWithFile(szRound); CCTMXTiledMap* tmxTileMap = tileMapInfo->getTileMap(); this->addChild(tmxTileMap); //在已有的地图上,创建玩家坦克 mPlayerTank[0] = Tank::createTankWithTankType("player2U.png", tileMapInfo); //设置坦克类型为玩家坦克 mPlayerTank[0]->setObjType(enumPlayerTank); mPlayerTank[0]->getBullet(); //放到地图中初始化位置 CCSize tileSize = tmxTileMap->getTileSize(); CCSize mapSize = tmxTileMap->getContentSize(); mPlayerTank[0]->setPosition(ccp(mapSize.width / 2 - tileSize.width * 3, tileSize.height)); //添加虚拟手柄的显示 mLayerPanel = Panel::create(); addChild(mLayerPanel, 3); //创建敌人坦克的AI mEnemyAI = EnemyAI::createEnemyAIWithTank(mPlayerTank[0]); return true; }
//private void RPGDialogLayer::initCommons(string titleStr) { CCTMXTiledMap *mainBg = CCTMXTiledMap::create("alert_style1.tmx"); float x = (CCDirector::sharedDirector()->getWinSize().width - mainBg->getContentSize().width) / 2.0f; float y = (CCDirector::sharedDirector()->getWinSize().height - mainBg->getContentSize().height) / 2.0f; mainBg->setPosition(ccp(x, y)); mainBg->setTag(kRPGDialogLayerBg); this->addChild(mainBg); CCLabelTTF *titleLab = CCLabelTTF::create(titleStr.c_str(), "Arial", 25, CCSizeMake(mainBg->getContentSize().width, 25), kCCTextAlignmentCenter, kCCVerticalTextAlignmentCenter); titleLab->setPosition(ccp(190, 135)); titleLab->setColor(ccc3(255, 255, 255)); mainBg->addChild(titleLab); CCMenu *menu = CCMenu::create(); menu->setAnchorPoint(CCPointZero); menu->setPosition(CCPointZero); menu->setTag(kRPGDialogLayerBgMenu); mainBg->addChild(menu); }
bool RPGMapSceneLayer::init(float showObjectTime) { if(RPGBaseSceneLayer::init()) { CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("joystick.plist"); CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("main.plist"); //加载语言文件 string languageFile = CCFileUtils::sharedFileUtils()->fullPathForFilename("scene_map_cns.plist"); this->m_stringList = CCDictionary::createWithContentsOfFileThreadSafe(languageFile.c_str()); this->m_stringList->retain(); //数据库部分,读取进度记录 CppSQLite3Query query = this->m_db.execQuery(SAVEDATA_MAP_QUERY); this->m_mapData.mapId = query.getIntField("map_id"); this->m_mapData.mapName = query.getStringField("map_name"); this->m_mapData.hasEnemy = query.getIntField("has_enemy") == 1 ? true : false; this->m_mapData.bgAudio = query.getStringField("bg_audio"); this->m_mapData.playerToX = query.getFloatField("player_to_x"); this->m_mapData.playerToY = query.getFloatField("player_to_y"); this->m_mapData.playerDirection = query.getStringField("player_direction"); this->m_mapData.location = query.getStringField("location_cns"); this->m_mapData.gold = query.getIntField("gold"); query.finalize(); CCTMXTiledMap *bgMap = CCTMXTiledMap::create(this->m_mapData.mapName.c_str()); bgMap->setTag(kRPGMapSceneLayerTagBgMap); bgMap->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - bgMap->getContentSize().width) / 2.0, (CCDirector::sharedDirector()->getWinSize().height - bgMap->getContentSize().height) / 2.0)); this->addChild(bgMap); //背景音乐 if(SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying()) { SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(true); SimpleAudioEngine::sharedEngine()->playBackgroundMusic(this->m_mapData.bgAudio.c_str(), true); } this->m_playerMoveAct = NULL; this->m_playerMoveSpeed = GAME_PLAYER_MOVESPEED; this->m_touchedDialogNPC = NULL; this->m_dialogDirection = kRPGMapSceneLayerDialogDirectionNone; this->m_hasEnemy = this->m_mapData.hasEnemy; //是否会遇敌 this->m_releaseTexture = false; //是否在释构方法里面释放占用纹理 this->scheduleOnce(schedule_selector(RPGMapSceneLayer::startPlay), showObjectTime); // CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo(); return true; } return false; }
bool InGameScene::initTerrain(const char *filename, cocos2d::CCSize winSize) { CCTMXTiledMap* pTerrain = CCTMXTiledMap::tiledMapWithTMXFile(filename); CCSize sizeTerrain = pTerrain->getContentSize(); if( !pTerrain ) return false; pTerrain->setScaleX(GAME_SCALE*WINSIZE_X/sizeTerrain.width); pTerrain->setScaleY(GAME_SCALE*WINSIZE_X/sizeTerrain.width); pTerrain->setAnchorPoint(ccp(0.5f, 0.5f)); pTerrain->setPosition(ccp(WINSIZE_X/2, 200.f)); this->addChild(pTerrain, 0.5); return true; }
// on "init" you need to initialize your instance bool MapScene::init() { //地图背景层 CCSprite *bg = CCSprite::create("background.png"); bg->setScale(1.5f); addChild(bg, 0); //地图初始化 CCTMXTiledMap *map = CCTMXTiledMap::create("ortho-objects.tmx"); addChild(map, 0, kTagTileMap); CCSize s = map->getContentSize(); int mapWidth = map->getMapSize().width * map->getTileSize().width; int mapHeight = map->getMapSize().height * map->getTileSize().height; CCSize winSize = CCDirector::sharedDirector()->getWinSize(); map->setPosition(ccp(0,0)); //初始化主角 gameplayer = CCSprite::create("grossini.png"); enemy = CCSprite::create("SpinningPeas.png"); map->addChild(gameplayer, map->getChildren()->count() ); map->addChild(enemy, map->getChildren()->count() ); //初始化敌人 enemy->setPosition(ccp(winSize.width/2 + 80,32)); enemy->setAnchorPoint(ccp(0.5f,0)); gameplayer->setPosition(ccp(winSize.width/2,32)); gameplayer->setAnchorPoint(ccp(0.5f,0)); setTouchEnabled(true); scheduleUpdate(); hmove = 0; vmove = 0; enemymovetick = 0; //主角矩形区域大小 ownsize = CCSizeMake(40,100); //敌人矩形区域大小 othersize = CCSizeMake(32,32); //是否是受伤状态 isreduce = false; return true; }
bool MPMapLayer::init() { CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); // Exit button CCMenuItemImage *backItem = CCMenuItemImage::create( "CloseNormal.png", "CloseSelected.png", this, menu_selector(MPMapLayer::titleCallback)); backItem->setPosition(ccp(origin.x + visibleSize.width - backItem->getContentSize().width/2 , origin.y + backItem->getContentSize().height/2)); CCMenu* menu = CCMenu::create(backItem, NULL); menu->setPosition(CCPointZero); this->addChild(menu, 1); // Screen Title CCLabelTTF* label = CCLabelTTF::create("A Map Scene", "Arial", TITLE_FONT_SIZE); label->setPosition(ccp(origin.x + visibleSize.width/2, origin.y + visibleSize.height - label->getContentSize().height)); this->addChild(label, 1); // Tile Map // CCTMXTiledMap *map = CCTMXTiledMap::create("MP_map/desert.tmx"); CCTMXTiledMap *map = CCTMXTiledMap::create("andrew_map/andrew_tilemap.tmx"); this->addChild(map, 0); MPMapLayer::antiAliasMap(map); map->setAnchorPoint(ccp(.5, .5)); map->setPosition(ccp(visibleSize.width * .5, visibleSize.height * .5)); map->setScale(.5); CCTMXLayer* layer = map->layerNamed("Background"); assert(layer != NULL); CCTMXObjectGroup *objectGroup = map->objectGroupNamed("SpawnPointLayer"); assert(objectGroup != NULL); CCSize mapSize = map->getContentSize(); float mapHeight = mapSize.height; float mapWidth = mapSize.width; player = CCSprite::create("andrew_map/Player.png"); CCDictionary *spawnPoint = objectGroup->objectNamed("SpawnPoint"); map->addChild(player,1); const CCString *positionX = spawnPoint->valueForKey("x"); const CCString *positionY = spawnPoint->valueForKey("y"); const CCString *objectName = spawnPoint->valueForKey("name"); std::cout << positionX->getCString() << std::endl; std::cout << mapHeight - positionY->intValue() % 32 << std::endl; std::cout << objectName->getCString() << std::endl; // player->setPosition(ccp(positionX,positionY)); /* CCSprite *tile = layer->tileAt(ccp(5,6)); assert(tile != NULL); layer->removeTileAt(ccp(5, 6)); CCActionInterval* actionBy = CCMoveBy::create(2, ccp(visibleSize.width * .5, visibleSize.height * .5)); map->runAction(actionBy); CCActionInterval* action = CCScaleBy::create(2, 2); map->runAction(action); */ /* CCSize s = layer->getLayerSize(); for (int x = 2; x < s.width; x++) { for (int y = 0; y < s.height; y++) { layer->removeTileAt(ccp(x, y)); } } */ return true; }
//private void RPGMapSceneLayer::startPlay(float delay) { CCTMXTiledMap *bgMap = (CCTMXTiledMap*)this->getChildByTag(kRPGMapSceneLayerTagBgMap); //数据库部分,读取npc数据 CppSQLite3Query query = this->m_db.execQuery(CCString::createWithFormat(NPC_QUERY, this->m_mapData.mapId)->getCString()); while(!query.eof()) { float x = (stringToNumber<float>(query.getStringField("tmx_x")) + 0.5) * GAME_TMX_ROLE_WIDTH; float y = (stringToNumber<float>(query.getStringField("tmx_y")) + 0.5) * GAME_TMX_ROLE_HEIGHT; bool autoMove = query.getIntField("auto_move") == 1 ? true : false; RPGMapNPCRoleSprite *npc = RPGMapNPCRoleSprite::create(query.getIntField("id"), CCString::create(query.getStringField("map_texture")), CCString::create("head_texture"), CCString::create(query.getStringField("name_cns")), CCString::create(query.getStringField("content_cns")), 1, autoMove); npc->setTag(kRPGMapSceneLayerTagNPC + query.getIntField("id")); npc->setPosition(ccp(x, y)); bgMap->addChild(npc); query.nextRow(); } query.finalize(); //player int defaultSpriteFrameIndex = 1; //默认为向下 if(this->m_mapData.playerDirection.compare("up") == 0) { defaultSpriteFrameIndex = 10; } else if(this->m_mapData.playerDirection.compare("left") == 0) { defaultSpriteFrameIndex = 4; } else if(this->m_mapData.playerDirection.compare("right") == 0) { defaultSpriteFrameIndex = 7; } RPGMapRoleSprite *player = RPGMapRoleSprite::create(CCString::create("actor4_0.png"), CCString::create("Player"), true, defaultSpriteFrameIndex); player->setPosition(ccp(this->m_mapData.playerToX * GAME_TMX_ROLE_WIDTH, this->m_mapData.playerToY * GAME_TMX_ROLE_HEIGHT)); player->setTag(kRPGMapSceneLayerTagPlayer); player->m_type = kRPGMapRoleSpriteTypePlayer; bgMap->addChild(player); CCSprite *spJoystick = CCSprite::createWithSpriteFrameName("Ball.png"); CCSprite *joystickBg = CCSprite::createWithSpriteFrameName("Dock.png"); OzgJoystickLayer *joystick = OzgJoystickLayer::layerActivityJoystick(50, spJoystick, joystickBg, false); joystick->setTag(kRPGMapSceneLayerTagJoystick); joystick->m_target = this; joystick->m_endedSelector = callfunc_selector(RPGMapSceneLayer::joystickEndedFunc); this->addChild(joystick); //menu CCMenu *mainMenu = CCMenu::create(); mainMenu->setTag(kRPGMapSceneLayerTagMainMenu); mainMenu->setAnchorPoint(ccp(0.5, 0.5)); mainMenu->setPosition(CCPointZero); mainMenu->setContentSize(bgMap->getContentSize()); bgMap->addChild(mainMenu); CCMenuItemSprite *menuCommand = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), this, menu_selector(RPGMapSceneLayer::onMenu)); menuCommand->setPosition(ccp(mainMenu->getContentSize().width - 35, mainMenu->getContentSize().height - 35)); menuCommand->setTag(kRPGMapSceneLayerTagMainMenuCommand); menuCommand->setRotation(180); menuCommand->setScale(0.75); mainMenu->addChild(menuCommand); // CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo(); CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 1, true); this->scheduleUpdate(); }
void MapScene::update(float dt) { CCPoint herop = m_tamara->getPosition(); CCPoint mapindex = convertto2d(herop.x,herop.y); //根据路径移动 if(stepindex >= 1){ int count = path->count(); if(smallstepindex == 0){ int ncol = ((AstarItem *)path->objectAtIndex(stepindex))->getcol(); int nrow = ((AstarItem *)path->objectAtIndex(stepindex))->getrow(); int pcol = ((AstarItem *)path->objectAtIndex(stepindex - 1))->getcol(); int prow = ((AstarItem *)path->objectAtIndex(stepindex - 1))->getrow(); if(pcol == ncol){ if(prow > nrow){ vmove = 2; }else if(prow < nrow){ vmove = 3; }else{ vmove = -1; } }else if(prow == nrow){ if(pcol > ncol){ vmove = 1; }else if(pcol < ncol){ vmove = 0; }else{ vmove = -1; } }else{ if(prow < nrow){ if(pcol < ncol){ vmove = 6; }else if(pcol > ncol){ vmove = 5; }else{ vmove = -1; } }else if(prow > nrow){ if(pcol < ncol){ vmove = 4; }else if(pcol > ncol){ vmove = 7; }else{ vmove = -1; } }else{ vmove = -1; } } } if(vmove == 0){ herop.x += 1; herop.y -= 0.5; }else if(vmove == 1){ herop.x -= 1; herop.y += 0.5; }else if(vmove == 2){ herop.x += 1; herop.y += 0.5; }else if(vmove == 3){ herop.x -= 1; herop.y -= 0.5; }else if(vmove == 4){ herop.x += 2; }else if(vmove == 5){ herop.x -= 2; }else if(vmove == 6){ herop.y -= 1; }else if(vmove == 7){ herop.y += 1; } smallstepindex ++; if(smallstepindex >= 32){ smallstepindex = 0; if(stepindex >= path->count() - 1){ stepindex = -1; vmove = -1; }else{ stepindex ++; vmove = -1; } } } m_tamara->setPosition(herop); //地图随主角移动 CCTMXTiledMap* map = (CCTMXTiledMap*) getChildByTag(kTagTileMap); CCSize s = map->getContentSize(); int mapWidth = map->getMapSize().width * map->getTileSize().width; int mapHeight = map->getMapSize().height * map->getTileSize().height; float deltax = herop.x - mapWidth/2; float deltay = herop.y - 112; CCSize winSize = CCDirector::sharedDirector()->getWinSize(); map->setPosition(ccp(-s.width/2 + winSize.width/2 - deltax,-deltay)); }
bool MPJonsMapLayer::init() { CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); // Exit button CCMenuItemImage *backItem = CCMenuItemImage::create( "CloseNormal.png", "CloseSelected.png", this, menu_selector(MPJonsMapLayer::titleCallback)); backItem->setPosition(ccp(origin.x + visibleSize.width - backItem->getContentSize().width/2 , origin.y + backItem->getContentSize().height/2)); CCMenu* menu = CCMenu::create(backItem, NULL); menu->setPosition(CCPointZero); this->addChild(menu, 1); // Screen Title CCLabelTTF* label = CCLabelTTF::create("A Map Scene", "Arial", TITLE_FONT_SIZE); label->setPosition(ccp(origin.x + visibleSize.width/2, origin.y + visibleSize.height - label->getContentSize().height)); this->addChild(label, 1); // Tile Map CCTMXTiledMap *map = CCTMXTiledMap::create("JonMap/Random.tmx"); this->addChild(map, 0); MPJonsMapLayer::antiAliasMap(map); map->setAnchorPoint(ccp(.5, .5)); map->setPosition(ccp(visibleSize.width * .5, visibleSize.height * .5)); map->setScale(.5); CCTMXLayer* layer = map->layerNamed("Background"); assert(layer != NULL); CCSize mapSize = map->getContentSize(); float mapHeight = mapSize.height; float mapWidth = mapSize.width; // player->setPosition(ccp(positionX,positionY)); /* CCSprite *tile = layer->tileAt(ccp(5,6)); assert(tile != NULL); layer->removeTileAt(ccp(5, 6)); CCActionInterval* actionBy = CCMoveBy::create(2, ccp(visibleSize.width * .5, visibleSize.height * .5)); map->runAction(actionBy); CCActionInterval* action = CCScaleBy::create(2, 2); map->runAction(action); */ /* CCSize s = layer->getLayerSize(); for (int x = 2; x < s.width; x++) { for (int y = 0; y < s.height; y++) { layer->removeTileAt(ccp(x, y)); } } */ return true; }
void RPGBattleMenu::onMenu(cocos2d::CCObject *pObject) { CCMenuItem *menuItem = (CCMenuItem*)pObject; SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav"); switch (menuItem->getTag()) { case kRPGBattleMenuTagSkill: { CCLog("技能"); this->hideMenu(); this->m_selectedMenuTag = kRPGBattleMenuTagSkill; CCMenuItemSprite *menuCancel = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), this, menu_selector(RPGBattleMenu::onMenu)); menuCancel->setPosition(ccp(43, 596)); menuCancel->setTag(kRPGBattleMenuTagCancel); menuCancel->setScale(0.75); this->addChild(menuCancel); CCTMXTiledMap *selectLayer = CCTMXTiledMap::create(CCString::createWithFormat("battle_select_%s.tmx", CCUserDefault::sharedUserDefault()->getStringForKey(GAME_STYLE).c_str())->getCString()); selectLayer->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - selectLayer->getContentSize().width) / 2, (CCDirector::sharedDirector()->getWinSize().height - selectLayer->getContentSize().height) / 2)); selectLayer->setTag(kRPGBattleSceneLayerTagSkillSelectDialog); ((RPGBattleSceneLayer*)this->m_parentNode)->addChild(selectLayer); ((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(true); //显示title和分隔线 addLab(selectLayer, 199, (CCString*)this->m_stringList->objectForKey("skill_title"), 25, ccp(310, 285)); CCLabelTTF *titleLab = (CCLabelTTF*)selectLayer->getChildByTag(199); titleLab->setFontFillColor(ccc3(144, 144, 144)); CCSprite *separate = CCSprite::createWithSpriteFrameName("separate.png"); separate->setPosition(ccp(selectLayer->getContentSize().width / 2, 260)); separate->setScaleX(0.65); separate->setTag(198); selectLayer->addChild(separate); //加载技能数据 CCTableView *tableView = (CCTableView*)selectLayer->getChildByTag(197); if(!tableView) { tableView = CCTableView::create(this, ccp(selectLayer->getContentSize().width, selectLayer->getContentSize().height - 80)); tableView->setDirection(kCCScrollViewDirectionVertical); tableView->setPosition(CCSizeZero); tableView->setDelegate(this); tableView->setVerticalFillOrder(kCCTableViewFillTopDown); tableView->setTag(197); selectLayer->addChild(tableView); } this->m_tableItems->removeAllObjects(); string wq = ""; JsonBox::Value json; json.loadFromString(this->m_playerData->m_skill.c_str()); JsonBox::Array jsonArr = json.getArray(); for (int i = 0; i < jsonArr.size(); i++) { char* str = (char*)malloc(10 * sizeof(char)); OzgCCUtility::itoa(jsonArr[i].getInt(), str); wq.append(str); if(i + 1 < jsonArr.size()) wq.append(", "); free(str); } if((int)wq.length() > 0) { CppSQLite3Query query = this->m_db->execQuery(CCString::createWithFormat(SKILL_QUERY, wq.c_str())->getCString()); while(!query.eof()) { RPGSkillBtnData *skill = RPGSkillBtnData::create(); skill->m_dataId = query.getIntField("id"); skill->m_name = query.getStringField("name_cns"); skill->m_MP = query.getIntField("mp"); skill->m_skillAttack = query.getIntField("skill_attack"); skill->m_type = query.getIntField("type"); skill->m_attr = query.getIntField("attr"); skill->m_enabled = true; //不能使用技能的情况 if(this->m_playerData->m_MP <= 0 || this->m_playerData->m_HP <= 0) skill->m_enabled = false; else if(this->m_playerData->m_MP < skill->m_MP) skill->m_enabled = false; this->m_tableItems->addObject(skill); query.nextRow(); } query.finalize(); } tableView->reloadData(); //加载技能数据 end ((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(false); } break; case kRPGBattleMenuTagItems: { CCLog("道具"); this->hideMenu(); this->m_selectedMenuTag = kRPGBattleMenuTagItems; CCMenuItemSprite *menuCancel = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), this, menu_selector(RPGBattleMenu::onMenu)); menuCancel->setPosition(ccp(43, 596)); menuCancel->setTag(kRPGBattleMenuTagCancel); menuCancel->setScale(0.75); this->addChild(menuCancel); CCTMXTiledMap *selectLayer = CCTMXTiledMap::create(CCString::createWithFormat("battle_select_%s.tmx", CCUserDefault::sharedUserDefault()->getStringForKey(GAME_STYLE).c_str())->getCString()); selectLayer->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - selectLayer->getContentSize().width) / 2, (CCDirector::sharedDirector()->getWinSize().height - selectLayer->getContentSize().height) / 2)); selectLayer->setTag(kRPGBattleSceneLayerTagItemsSelectDialog); ((RPGBattleSceneLayer*)this->m_parentNode)->addChild(selectLayer); ((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(true); //显示title和分隔线 addLab(selectLayer, 199, (CCString*)this->m_stringList->objectForKey("items_title"), 25, ccp(310, 285)); CCLabelTTF *titleLab = (CCLabelTTF*)selectLayer->getChildByTag(199); titleLab->setFontFillColor(ccc3(144, 144, 144)); CCSprite *separate = CCSprite::createWithSpriteFrameName("separate.png"); separate->setPosition(ccp(selectLayer->getContentSize().width / 2, 260)); separate->setScaleX(0.65); separate->setTag(198); selectLayer->addChild(separate); //加载道具数据 CCTableView *tableView = (CCTableView*)selectLayer->getChildByTag(197); if(!tableView) { tableView = CCTableView::create(this, ccp(selectLayer->getContentSize().width, selectLayer->getContentSize().height - 80)); tableView->setDirection(kCCScrollViewDirectionVertical); tableView->setPosition(CCSizeZero); tableView->setDelegate(this); tableView->setVerticalFillOrder(kCCTableViewFillTopDown); tableView->setTag(197); selectLayer->addChild(tableView); } this->m_tableItems->removeAllObjects(); CCArray *existingItems = ((RPGBattleSceneLayer*)this->m_parentNode)->m_existingItems; for (int i = 0; i < existingItems->count(); i++) this->m_tableItems->addObject(existingItems->objectAtIndex(i)); tableView->reloadData(); //加载道具数据 end ((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(false); } break; case kRPGBattleMenuTagEscape: { // CCLog("逃跑"); float success = CCRANDOM_0_1(); if(success >= 0.0 && success <= 0.5) { // CCLog("逃跑成功"); this->setEnabled(false); this->removeFromParentAndCleanup(true); ((RPGBattleSceneLayer*)this->m_parentNode)->goToMap(); } else { ((RPGBattleSceneLayer*)this->m_parentNode)->showMsg((CCString*)this->m_stringList->objectForKey("escape_fail")); //重置进度条 this->m_playerData->m_progress = 0.0; CCProgressTimer *battleProgress = (CCProgressTimer*)this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagPlayerProgress + this->m_playerData->m_dataId); battleProgress->setPercentage(this->m_playerData->m_progress); ((RPGBattleSceneLayer*)this->m_parentNode)->scheduleUpdate(); CCTMXTiledMap *bgLayer = (CCTMXTiledMap*)this->m_parentNode->getChildByTag(kRPGBattleMenuTagBg); bgLayer->removeFromParentAndCleanup(true); this->removeFromParentAndCleanup(true); } } break; case kRPGBattleMenuTagCancel: { // CCLog("取消"); this->showMenu(); CCMenuItem *menuCancel = (CCMenuItem*)this->getChildByTag(kRPGBattleMenuTagCancel); menuCancel->removeFromParentAndCleanup(true); switch (this->m_selectedMenuTag) { case kRPGBattleMenuTagAttack: CCLog("取消攻击"); ((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(false); ((RPGBattleSceneLayer*)this->m_parentNode)->cancelAllSelected(); break; case kRPGBattleMenuTagSkill: CCLog("取消技能列表"); if(((RPGBattleSceneLayer*)this->m_parentNode)->getChildByTag(kRPGBattleSceneLayerTagSkillSelectDialog)) ((RPGBattleSceneLayer*)this->m_parentNode)->removeChildByTag(kRPGBattleSceneLayerTagSkillSelectDialog, true); ((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(false); ((RPGBattleSceneLayer*)this->m_parentNode)->cancelAllSelected(); break; case kRPGBattleMenuTagItems: CCLog("取消道具列表"); if(((RPGBattleSceneLayer*)this->m_parentNode)->getChildByTag(kRPGBattleSceneLayerTagItemsSelectDialog)) ((RPGBattleSceneLayer*)this->m_parentNode)->removeChildByTag(kRPGBattleSceneLayerTagItemsSelectDialog, true); ((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(false); ((RPGBattleSceneLayer*)this->m_parentNode)->cancelAllSelected(); break; // default: // break; } } break; case kRPGBattleMenuTagCancel2: { //这个选择了一个技能或道具后,到了选择目标对象的一步,使用到的取消按钮 CCMenuItemSprite *menuCancel = (CCMenuItemSprite*)this->getChildByTag(kRPGBattleMenuTagCancel); menuCancel->setVisible(true); CCMenuItemSprite *menuCancel2 = (CCMenuItemSprite*)this->getChildByTag(kRPGBattleMenuTagCancel2); menuCancel2->removeFromParentAndCleanup(true); if(this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagItemsSelectDialog)) this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagItemsSelectDialog)->setVisible(true); if(this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagSkillSelectDialog)) this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagSkillSelectDialog)->setVisible(true); ((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(false); ((RPGBattleSceneLayer*)this->m_parentNode)->cancelAllSelected(); } break; default: { CCLog("攻击"); this->hideMenu(); this->m_selectedMenuTag = kRPGBattleMenuTagAttack; CCMenuItemSprite *menuCancel = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), this, menu_selector(RPGBattleMenu::onMenu)); menuCancel->setPosition(ccp(43, 596)); menuCancel->setTag(kRPGBattleMenuTagCancel); menuCancel->setScale(0.75); this->addChild(menuCancel); ((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(true); } break; } }
void GameLayer::CreateMapLayer() { //auto backColor1 = LayerColor::create(ccc4(192, 192, 192, 225)); //this->addChild(backColor1); auto backColor = LayerColor::create(ccc4(0, 0, 0, 225)); this->addChild(backColor); //初始化地图信息 char szRound[260]; sprintf(szRound, "Round%d.tmx", _level); _tileMapInfo = TileMapInfo::createMapInfoWithFile(szRound); CCTMXTiledMap* tmxTileMap = _tileMapInfo->getTileMap(); //this->addChild(tmxTileMap); backColor->addChild(tmxTileMap); //在已有的地图上,创建玩家坦克 _playerTank[0] = Tank::createTankWithTankType("player2U.png", _tileMapInfo); //设置坦克类型为玩家坦克 _playerTank[0]->setObjType(PlayerTank); _playerTank[0]->getBullet(); //放到地图中初始化位置 CCSize tileSize = tmxTileMap->getTileSize(); CCSize mapSize = tmxTileMap->getContentSize(); _playerTank[0]->setPosition(ccp(mapSize.width / 2 - tileSize.width * 3, tileSize.height)); _playerTank[0]->setMovedRect(_playerTank[0]->boundingBox()); _playerTank[0]->setOldMovedRect(_playerTank[0]->boundingBox()); //创建敌人坦克的AI _enemyAI = EnemyAI::createEnemyAIWithTank(_playerTank[0],enemyTanksCount[_level]); //添加开火按钮 Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); auto fireButton = MenuItemImage::create( "fire_button_default.png", "fire_button_press.png", CC_CALLBACK_1(GameLayer::menuCallback_PlayerFire, this)); fireButton->setPosition(Vec2(origin.x + visibleSize.width - fireButton->getContentSize().width / 2, origin.y + fireButton->getContentSize().height / 2) + Vec2(-100, 200)); auto menu = Menu::create(fireButton, NULL); menu->setPosition(Vec2::ZERO); this->addChild(menu); //添加遥控杆 auto controlSprite = Sprite::create("cen.png"); auto controlbgSprite = Sprite::create("control_bg.png"); //controlbgSprite->setOpacity(100); //controlSprite->setOpacity(100); //controlSprite->setScale(1.5f); _controlLayer = HRockerLayer::HRockerWithCenter(Vec2(100.0f, 250.0f), 70.0f, controlSprite, controlbgSprite, false); this->addChild(_controlLayer); ////////////////////////////////////////////////////////////////////////// auto menuItem01 = cocos2d::MenuItemFont::create("Next", this, menu_selector(GameLayer::menuCallback_NextLevel)); //menuItem01->setPosition(VisibleRect::center()+Vec2(0,-150)); menuItem01->setPosition(Vec2(0, 0)); menuItem01->setFontSize(45); menuItem01->setFontNameObj("Marker Felt"); auto menuItem02 = cocos2d::MenuItemFont::create("P/C", this, menu_selector(GameLayer::menuCallback_Pause)); menuItem02->setPosition(Vec2(120, 0)); //menuItem02->setPosition(Vec2(0, 0)); menuItem02->setFontSize(45); menuItem02->setFontNameObj("Marker Felt"); auto menu2 = cocos2d::Menu::create(menuItem01, menuItem02, NULL); menu2->setPosition(VisibleRect::leftTop() + Vec2(menuItem01->getContentSize().width, -menuItem01->getContentSize().height)); this->addChild(menu2); }
//定时器调用的移动处理函数 void OptionLayer::updateMove(float dt) { OptionLayer *optionLayer = global->optionLayer; CCTMXTiledMap *tmxTileMap = global->tmxTileMap; DirectionControlButton *ControlWheelSprite = optionLayer->getDirectionCrtl(); CCPoint Direction = ControlWheelSprite->getDirection(); Hero *heroCtrl = global->hero; //控制的角色 CCPoint position = heroCtrl->getPosition() + Direction; //下一次需要移动的位置(加上偏移量) //----------------------------控制主角移动------------------------------------------------- //瓦片地图允许移动到该位置,且摇杆对象不为空 if(ControlWheelSprite && global->tileAllowMove(position)){ if(Direction.x != 0||Direction.y != 0) { heroCtrl->RunMovingAction();//只要偏移量不为0就执行行走动画 }else if(heroCtrl->getActionState() == ActionStateNone){ heroCtrl->RunIdleAction(); } //设置英雄的zOrder,以其y轴为zOrder heroCtrl->setZOrder(1/heroCtrl->getPositionY()*ScreenHeight*4+1);//同Y轴 人物比NPC zOrder值大1 if (heroCtrl->getAllowMove()&&(Direction.x != 0||Direction.y != 0)) { CCSize size=CCDirector::sharedDirector()->getWinSize(); //制造一个矩形框,人物只会在当前框里活动,可通过地图移动来造成更大面积的移动范围 CCRect rect=CCRectMake(heroCtrl->getContentSize().width/2,heroCtrl->getContentSize().height/2,size.width-(heroCtrl->getContentSize().width/2),size.height-(heroCtrl->getContentSize().height/2)); //创建一个逻辑矩形,范围是屏幕的大小,用于判断边界 if(rect.containsPoint(position)){ float mapMaxX = 0; //计算是否是人移动还是地图移动,注意:地图在初始化时锚点已设为cpp(0,0) if(heroCtrl->getPosition().x <= SCREEN.width/2 && Direction.x>0 && position.x > SCREEN.width/2){ //地图需要左移动,position表示人物下一帧的位置 //计算地图最右端x轴下一次位置 mapMaxX = tmxTileMap->getPositionX()+tmxTileMap->getContentSize().width-Direction.x; //保证地图不会把越界部分移出来 if(mapMaxX > SCREEN.width){ global->tmxTileMap->setPositionX(global->tmxTileMap->getPositionX()-Direction.x); OptionLayer::npcMoveByMap(ccp(-Direction.x,0)); if(Direction.y != 0){ heroCtrl->setPositionY(heroCtrl->getPositionY() + Direction.y);//防止地图移动时,人物Y轴不能移动 } }else{ heroCtrl->setPosition(position); //地图快要越界,人物移动即可 } }else if(heroCtrl->getPosition().x >= SCREEN.width/2 && Direction.x<0 && position.x < SCREEN.width/2){//地图需要像右移动 //计算地图最左端x轴下一次位置 mapMaxX = tmxTileMap->getPositionX()+Direction.x; //保证地图不会把越界部分移出来 if(mapMaxX < 0){ global->tmxTileMap->setPositionX(global->tmxTileMap->getPositionX()-Direction.x); OptionLayer::npcMoveByMap(ccp(-Direction.x,0)); if(Direction.y != 0){ heroCtrl->setPositionY(heroCtrl->getPositionY() + Direction.y);//防止地图移动时,人物Y轴不能移动 } }else{ heroCtrl->setPosition(position); //地图快要越界,人物移动 } }else{ heroCtrl->setPosition(position); //人物移动即可 } } } } //--------------------------控制怪物移动----------------------------------- CCArray *npcs = global->npcs; CCObject *pObject = NULL; CCARRAY_FOREACH(npcs, pObject){ NPC* npc =(NPC*)pObject; npc->setZOrder(1/npc->getPositionY()*ScreenHeight*4);//设置 怪物zOrder //如果是非动作状态则执行idle动画 if(npc->getActionState() == ActionStateNone){ npc->RunIdleAction(); } npc->setPosition(npc->getPosition()+npc->getVector()); //怪物移动 CCLOG("=========npc.x=%f/npc.y=%f======",npc->getPositionX(),npc->getPositionY()); npcMoveToHero(npc);//坐标处理函数 }