2013年02月27日

iAdが出なくなりました。。。

小学生向けの算数先生にiAdを入れていたのですが
まったくでなくなりました。

https://developer.apple.com/support/ios/iad-network.htmlをみて納得しました。。。

Please note: Apple policy does not allow for iAd rich media ads in apps designed for children.
ご注意:Appleの方針は、子供たちのために設計されたアプリのIADはリッチメディア広告を許可しません。

なるほどですねぇ。とほほ。
posted by itokami1123 at 00:28| Comment(0) | 日記

2013年02月24日

すみません。修正しました!

Cocos2d-xでもデータの管理はシングルトンでしたいの.cppのソースが張り付けミスしてました。。
さっそく修正しました。

こちらの方のご指摘でわかりました。
ご指摘ありがとうございました!!
http://qiita.com/items/5eca8aab0dbd3f33273c#comment-a7cbb8eae2fdd5078c1c

posted by itokami1123 at 22:44| Comment(0) | 日記

cocos2d-xのCCTableViewを使ってみました。

Cocos2d-xでiPhoneとAndroid同時リリースがんばるぞ〜。

今日は学習アプリでよくある成績発表画面を作る為に
一覧表の表示を調べて行きたいと思います。

Objective-C (UIKit)で言うUITableView風のものが
Cocos2d-xに CCTableViewっていう名前であるらしいです。

命名規約がUIKitに似ていて分かりやすいですね〜。

おそらくUITableViewと一緒なんでしょうから
DelegateとDataSourceの実装がいるんでしょうかねぇ。

まず公式サイトのリファレンスを読んでみます。
英語一杯ですね。。。
英語がすらすら読める様に勉強せねば。。

CCTableViewDelegate Class Referenceを見ますと
"tableCellTouched" に "pure virtual"って書いてます。

多分pure virtualがObjective-Cで言う
required(実装必須メソッド)なんでしょうかね。

CCTableViewDataSource Class Referenceを見ますと
"cellSizeForTable" "numberOfCellsInTableView" "tableCellAtIndex"の
3つが"pure virtual"みたいですね。

それでは最小限のテーブルをゲーム画面に追加してみます。

Objective-C (UIKit)のUITableViewのサンプルだと
DelegateとDataSourceの
@protocol(Javaで言うinterfaceみたいなもの)を
実装するんですけど...

Cocos2d-x (C++)では多重継承を使うみたいですね。
人生初の多重継承です。

ゲーム画面のヘッダ(GameScene.h)に追加しました。

class Game : public cocos2d::CCLayer,
public cocos2d::extension::CCTableViewDataSource,
public cocos2d::extension::CCTableViewDelegate
{


extensionでエラーが??

設定が足りないみたいなので以下を加えるとなおりました。

#include "cocos-ext.h"
using namespace cocos2d;
using namespace cocos2d::extension;


CCTableViewは拡張機能なんでしょうかねぇ。。
まぁ気にせず進みます。

ヘッダファイルのpublic:に以下を加えました。

public:
  ・・・ 省略 ・・・
// CCTableViewDelegate用
virtual void tableCellTouched(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);

// CCTableViewDataSoruce用
virtual cocos2d::CCSize cellSizeForTable(cocos2d::extension::CCTableView *table);
virtual cocos2d::extension::CCTableViewCell* tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx);
virtual unsigned int numberOfCellsInTableView(cocos2d::extension::CCTableView *table);

// ポイント!これも要るよ〜。
// CCTableViewDelegateがCCScrollViewDelegateを継承していて
// それの実装必須のものみたいです。
virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView* view) {};
virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view) {}
  ・・・ 省略 ・・・

};


宣言部も用意出来たので".cpp"にDelegateとDataSourceの実装をして行きます。


// CCTableViewDelegate用
void Game::tableCellTouched(CCTableView* table, CCTableViewCell* cell)
{
// Cellをタッチした時の番号を表示
CCLOG("cell wo touch sitayo Idx ha --> %i", cell->getIdx());
}

// CCTableViewDataSoruce用
CCSize Game::cellSizeForTable(CCTableView *table)
{
// 一つのCellのサイズ
return CCSizeMake(200, 40);
}

CCTableViewCell* Game::tableCellAtIndex(CCTableView *table, unsigned int idx)
{
CCString *string = CCString::createWithFormat("%i行目", idx);

// Cellがもう作られているかチェック
CCTableViewCell *cell = table->dequeueCell();
if (!cell) {
// 無ければ作る
cell = new CCTableViewCell();
cell->autorelease();

// セルの背景を描画
CCLayerColor *layer = CCLayerColor::create( ccc4(250, 250, 250, 255) );
layer->setContentSize( CCSizeMake(200, 38) ); //.contentSize = CGSizeMake(100, 100);
layer->setAnchorPoint(ccp(0, 0));
layer->setPosition(ccp(0, 0));
layer->setTag(111);
cell->addChild( layer );

// ラベル文字を表示
CCLabelTTF *label = CCLabelTTF::create(string->getCString(), "Hiragino Kaku Gothic ProN", 24);
layer->setAnchorPoint(ccp(0, 0));
label->setPosition(ccp(40, 10));
label->setTag(112);
label->setHorizontalAlignment( kCCTextAlignmentLeft );
cell->addChild(label);

label->setColor( ccc3(0, 0, 0) );


}else{
// 既にCellが生成済みであればそれを再利用して文字を表示する
CCLabelTTF *label = (CCLabelTTF*)cell->getChildByTag(112);
label->setString(string->getCString());
}
return cell;
}

unsigned int Game::numberOfCellsInTableView(CCTableView *table)
{
// Cellの数は10個にする
return 10;
}

どーしてもセルの背景色の付け方が分からなくて
セルの中に四角の白い矩形を追加して背景にしました。
あってるのかなぁ??

最後にCCTableViewを画面に追加します。

bool Game::init()
{
・・・ 省略 ・・・

/* 画面にテーブルを追加 */
CCTableView* tableView = CCTableView::create( this, CCSizeMake(300, 200) );
tableView->setDirection( kCCScrollViewDirectionVertical );
tableView->setPosition( ccp( 60, 200 ) );
tableView->setDelegate( this );
this->addChild( tableView, 1 );
tableView->reloadData();

return true;
}


なんとかテーブルが表示されました。
CCTableView.png

ちょっとUITableViewと動きが違ってますねぇ。

テーブル表示に2日ほど悩んでしまいました。。
う〜む、このままではソフト公開に1年位かかってしまいそうです〜。

posted by itokami1123 at 22:24| Comment(0) | 日記