marg-do's

関数型生活

cocos2d-xでiOSデフォルトのMapViewを表示する

cocos2d-xではデフォルトでMapViewのような物が無いので(当たり前といえば当たり前)、地図を表示させる部分のみネイティブで実装する必要がある。

とりあえずiOS版だけメモ。

// HelloWorldScene.cpp
// メインの実装ファイル

// ……省略……

// MapViewを開始する
void HelloWorld::startMapView()
{
    // native viewと相性が悪いため一旦止める
    // MapView終了後Director::sharedDirector()->resume();でcocos2d-x側に復帰
    Director::sharedDirector()->pause(); 
    MapView::showMap();
}

// ……省略……
// MapView.h
// MapViewとブリッジするクラス

#ifndef MapView_h
#define MapView_h
class MapView
{
public:
    static bool showMap();
};
#endif
// MapView.mm
// iOSのネイティブ実装
#import "MapView.h"
#import <MapKit/MapKit.h> // 事前にMapKitを導入しておく

// cocos2d-xと連携するためには以下の2行が必要らしい
#include "deprecated/CCString.h"
using namespace cocos2d;

void MapView::showMap() {
    // 復帰時には[mv removeFromSuperview];で削除
    MKMapView *mv = [[MKMapView alloc] init];
    mv.frame = CGRectMake(0,0,320,480);

    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    [window addSubview:mv];
}