Contenu connexe
Similaire à ㊱タイルマップに挑戦 (20)
Plus de Nishida Kansuke (20)
㊱タイルマップに挑戦
- 6. プロジェクトの作成③
tonosamart-mac-2: tonosamart$ cd cocos/cocos2d-x-2.2.2/tools/
project-creator
tonosamart-mac-2:project-creator tonosamart$ ./create_project.py project TileMap -package com.tonosamart.tiled -language cpp
proj.ios
: Done!
proj.android
: Done!
proj.win32
: Done!
proj.winrt
: Done!
proj.wp8
: Done!
proj.mac
: Done!
proj.blackberry
: Done!
proj.linux
: Done!
proj.marmalade
: Done!
New project has been created in this path: /Users/tonosamart/
cocos/cocos2d-x-2.2.2/projects/TileMap
Have Fun!
- 24. MAPを表示してみる
• 画面の左下にMAPの左下を合わせて描画
HelloWorldScene.cpp
// add the sprite as a child to this layer
this->addChild(pSprite, 0);
// マップ表示
cocos2d::CCTMXTiledMap* pBgMap =
CCTMXTiledMap::create("stage1.tmx");
pBgMap->setAnchorPoint(ccp(0, 0));
pBgMap->setPosition(ccp(0, 0));
this->addChild(pBgMap, 100, 100);
- 28. 表示を綺麗にする②
HelloWorldScene.cpp
//
マップ表示
cocos2d::CCTMXTiledMap*
pBgMap
=
CCTMXTiledMap::create("stage1.tmx");
pBgMap-‐>setAnchorPoint(ccp(0,
0));
pBgMap-‐>setPosi;on(ccp(0,
0));
this-‐>addChild(pBgMap,
0);
//
アンチエイリアスをOFFにする
CCArray*
pChildrenArray
=
pBgMap-‐>getChildren();
CCSpriteBatchNode*
pChild
=
NULL;
CCObject*
pObject
=
NULL;
CCARRAY_FOREACH(pChildrenArray,
pObject){
pChild
=
(CCSpriteBatchNode*)pObject;
if(!pChild){
break;
}
pChild-‐>getTexture()-‐>setAn;AliasTexParameters();
}
- 32. タッチイベント①
HelloWorld.h
//
implement
the
"sta;c
node()"
method
manually
CREATE_FUNC(HelloWorld);
//
スクロール用座標
cocos2d::CCPoint
mapPos;
cocos2d::CCPoint
startPos;
//
タッチイベント
bool
ccTouchBegan(cocos2d::CCTouch
*pTouch,
cocos2d::CCEvent
*pEvent);
void
ccTouchEnded(cocos2d::CCTouch
*pTouch,
cocos2d::CCEvent
*pEvent);
void
ccTouchMoved(cocos2d::CCTouch
*pTouch,
cocos2d::CCEvent
*pEvent);
void
ccTouchCancelled(cocos2d::CCTouch
*pTouch,
cocos2d::CCEvent
*pEvent);
- 33. タッチイベント②
HelloWorld.cpp
//
-‐-‐-‐-‐
タッチイベント
bool
HelloWorld::ccTouchBegan(CCTouch
*pTouch,
CCEvent
*pEvent){
cocos2d::CCTMXTiledMap*
pBgMap
=
dynamic_cast<CCTMXTiledMap*>(this-‐
>getChildByTag(100));
this-‐>mapPos
=
ccp(pBgMap-‐>getPosi;onX(),
pBgMap-‐>getPosi;onY());
CCPoint
pos
=
pTouch-‐>getLoca;on();
this-‐>startPos
=
ccp(pos.x,
pos.y);
return
true;
}
- 35. タッチイベント④
HelloWorld.cpp
void
HelloWorld::ccTouchMoved(CCTouch
*pTouch,
cocos2d::CCEvent
*pEvent){
cocos2d::CCTMXTiledMap*
pBgMap
=
dynamic_cast<CCTMXTiledMap*>(this-‐
>getChildByTag(100));
CCPoint
pos
=
pTouch-‐>getLoca;on();
pBgMap-‐>setPosi;on(this-‐>mapPos.x
+
pos.x
-‐
this-‐>startPos.x,
this-‐>mapPos.y
+
pos.y
-‐
this-‐>startPos.y);
}
void
HelloWorld::ccTouchCancelled(CCTouch
*pTouch,
CCEvent
*pEvent){
}
- 36. タッチイベント⑤
HelloWorld.cpp
//
アンチエイリアスをOFFにする
:
//
タッチイベント有効
this-‐>setTouchMode(kCCTouchesOneByOne);
this-‐>setTouchEnabled(true);
- 40. GID取得①
HelloWorld.cpp
this-‐>startPos
=
ccp(pos.x,
pos.y);
//
タッチした地点のMAP座標を計算
CCDirector*
pDirector
=
CCDirector::sharedDirector();
CCSize
;leSize
=
ccp(
pBgMap-‐>getTileSize().width
/
pDirector-‐>getContentScaleFactor(),
pBgMap-‐>getTileSize().height
/
pDirector-‐>getContentScaleFactor()
);
CCSize
mapSize
=
pBgMap-‐>getMapSize();
- 41. GID取得②
HelloWorld.cpp
int
cx
=
(pos.x
-‐
this-‐>mapPos.x)
/
;leSize.width;
int
cy
=
((mapSize.height
*
;leSize.height)
-‐
(pos.y
-‐
this-‐>mapPos.y))
/
;leSize.height;
if(cx
>=
0
&&
cx
<
mapSize.width
&&
cy
>=
0
&&
cy
<
mapSize.height){
CCTMXLayer*
pBgLayer
=
pBgMap-‐>layerNamed("BG");
int
bgGID
=
pBgLayer-‐>;leGIDAt(ccp(cx,
cy));
CCLog("MAP(%d,%d)=%d",
cx,
cy,
bgGID);
}
return
true;