#include "HelloWorldScene.h" USING_NS_CC; Scene* HelloWorld::createScene() { // 'scene' is an autorelease object auto scene = Scene::create(); // 'layer' is an autorelease object auto layer = HelloWorld::create(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene; } // on "init" you need to initialize your instance bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !Layer::init() ) { return false; } winSize = Director::getInstance()->getWinSize(); bgX = 0; auto listener = EventListenerKeyboard::create(); listener->onKeyPressed = CC_CALLBACK_2(HelloWorld::onKeyPressed, this); Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this); auto map = TMXTiledMap::create("map01.tmx"); map->setTag(2); this->addChild(map); //오브젝트를 가져오기 위한 오브젝트 그룹 추가 auto objectGroup = map->getObjectGroup("Object Layer 1"); //해당 오브젝트 그룹 내에 있는 오브젝트 가져옴 auto objectStart = objectGroup->getObject("start"); float x = objectStart["x"].asFloat(); float y = objectStart["y"].asFloat(); auto man = Sprite::create("kongman.png"); man->setTag(1); man->setPosition(Vec2(x, y)); this->addChild(man); return true; } void HelloWorld::onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event) { auto spr = (Sprite*)this->getChildByTag(1); Vec2 pos = spr->getPosition(); auto map = (TMXTiledMap*)this->getChildByTag(2); switch (keyCode) { case EventKeyboard::KeyCode::KEY_LEFT_ARROW: spr->setPosition(pos.x - 32, pos.y); break; case EventKeyboard::KeyCode::KEY_RIGHT_ARROW: spr->setPosition(pos.x + 32, pos.y); break; case EventKeyboard::KeyCode::KEY_UP_ARROW: spr->setPosition(pos.x, pos.y+32); break; case EventKeyboard::KeyCode::KEY_DOWN_ARROW: spr->setPosition(pos.x, pos.y-32); break; default: break; } if (spr->getPositionX() < 16) { spr->setPosition(Vec2(16, spr->getPositionY())); bgX += 32; if (bgX > 0) bgX = 0; } else if (spr->getPositionX() > winSize.width - 16) { //스프라이트를 원위치로 옮겨주고 spr->setPosition(Vec2(winSize.width - 16, spr->getPositionY())); //스프라이트 대신 배경을 움직임 bgX -= 32; //만약 배경위치가 범위밖이면 범위안으로 옮겨줌 if (bgX < -(3200 - 480)) bgX = -(3200 - 480); } else if (spr->getPositionY() < 16) { spr->setPosition(Vec2(spr->getPositionX(), 16)); } else if (spr->getPositionY() > winSize.height - 16) { spr->setPosition(Vec2(spr->getPositionX(), winSize.height - 16)); } //보정된 지도 위치에 따라 지도위치를 옮겨줌 map->setPosition(Vec2(bgX, 0)); int indexX = spr->getPositionX() / 32; int indexY = (10 - spr->getPositionY() / 32); auto tileLayer = map->getLayer("Tile Layer 1"); int GID = tileLayer->getTileGIDAt(Vec2(indexX, indexY)); CCLOG("GID : %d", GID); if (GID == 31) { // 해당 GID에 저장되어 있는 속성 데이터를 가져옴 ValueMap property = map->getPropertiesForGID(31).asValueMap(); // 가져온 속성값 중에서 특정값에 해당되는 내용을 가져옴 Value wall = property.at("WALL"); // 저장된 내용과 비교 if (wall.asString().compare("NO")) { CCLOG("WALL : YES"); } } } |