がおまる開発ブログ

cocos2d-xやlevelhelperを使って iPhone/Androidアプリの作り方を解説します

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CCEditBoxで入力した文字数を取得する

CCEditBoxを使って、入力した文字数を取得しようとした時にえらいハマったので、
備忘録として残しておきます。


#include <iostream>
#include "cocos2d.h"
#include "cocos-ext.h"

class InputLayer: public cocos2d::CCLayer, public cocos2d::extension::CCEditBoxDelegate {
public:
InputLayer();
~InputLayer();

static cocos2d::CCScene* scene();
virtual void editBoxEditingDidBegin(cocos2d::extension::CCEditBox* editBox);
virtual void editBoxEditingDidEnd(cocos2d::extension::CCEditBox* editBox);
virtual void editBoxTextChanged(cocos2d::extension::CCEditBox* editBox, const std::string& text);
virtual void editBoxReturn(cocos2d::extension::CCEditBox* editBox);


private:
cocos2d::extension::CCEditBox* m_pEditName;
int wlen(const char *str);
};



#include "InputLayer.h"

using namespace cocos2d;
using namespace extension;

////////////////////////////////////////////////////////////////////////////////
InputLayer::InputLayer()
{
CCSize visibleSize = CCEGLView::sharedOpenGLView()->getVisibleSize();
CCSize editBoxSize = CCSizeMake(visibleSize.width - 30, 30);
CCSize s = CCDirector::sharedDirector()->getWinSize();

m_pEditName = CCEditBox::create(editBoxSize, CCScale9Sprite::create("edit.png"));
m_pEditName->setPosition(ccp(s.width/2, s.height/2));
m_pEditName->setFontColor(ccRED);
m_pEditName->setPlaceHolder("入力してね");
m_pEditName->setMaxLength(15);
m_pEditName->setReturnType(kKeyboardReturnTypeDone);
m_pEditName->setDelegate(this);
addChild(m_pEditName);

}

////////////////////////////////////////////////////////////////////////////////
void InputLayer::editBoxEditingDidBegin(cocos2d::extension::CCEditBox* editBox)
{
}

////////////////////////////////////////////////////////////////////////////////
void InputLayer::editBoxEditingDidEnd(cocos2d::extension::CCEditBox* editBox)
{
}

////////////////////////////////////////////////////////////////////////////////
void InputLayer::editBoxTextChanged(cocos2d::extension::CCEditBox* editBox, const std::string& text)
{
int cnt = this->wlen(text.c_str());
CCLog("文字数=%d", cnt);
}

////////////////////////////////////////////////////////////////////////////////
void InputLayer::editBoxReturn(CCEditBox* editBox)
{
}

////////////////////////////////////////////////////////////////////////////////
// 文字数取得
int InputLayer::wlen(const char *buff)
{
if( buff == NULL ) return 0;

int count = 0;
int pos = 0;
int max_bytes = strlen( buff );

// BOM 読み飛ばし
if( max_bytes >= 3 )
{
if( static_cast<unsigned char>( buff[0] ) == 0xEF &&
static_cast<unsigned char>( buff[1] ) == 0xBB &&
static_cast<unsigned char>( buff[2] ) == 0xBF )
{
pos += 3;
}
}

while( pos < max_bytes )
{
++count; // 文字数カウント

if( ( buff[pos] & 0x80 ) == 0 )
{
++pos; // 1バイト文字
}
else
{
for( char tmp = buff[pos] & 0xfc; (tmp & 0x80); tmp = tmp << 1 )
{
++pos; // 複数バイト文字
}
}
}
return count;
}
////////////////////////////////////////////////////////////////////////////////
InputLayer::~InputLayer() {
}

////////////////////////////////////////////////////////////////////////////////
CCScene* InputLayer::scene()
{
// 'scene' is an autorelease object
CCScene *scene = CCScene::create();

// add layer as a child to scene
InputLayer* layer = new InputLayer();
scene->addChild(layer);
layer->release();

return scene;
}

スポンサーサイト

cocos2d-xにスコアセンターを組み込む

要望があったので、Android用マルジュ製のスコアセンターをcocos2d-xに
組み込んでみましょう。

Xcode側はJNIとか面倒くさいので、CCMessageBoxを使って実装していきます。
そりゃJNI使っても構いません。

スコアセンターの登録や必要なスコアボードIDの取得はこちらから確認してください。

では、Xcode側で、スコアを送りたいタイミングでこれを記述
下記例では100点をスコアセンターに送ります


#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
// スコア送信
CCMessageBox("submit_score@100", "command");

// スコアボード表示
CCMessageBox("showLeaderbord", "command");

#endif



続いてEclipse側にScoreCenterSDK-v1.0.1.jarにビルドパスを通してください。
s_20130325_0.png

続いてCocos2dxActivity.javaを編集します

public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelperListener {
// マルジュ用スコアセンター
private ScoreCenter mScoreCenter;

@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// マルジュ用スコアボード初期化
mScoreCenter = ScoreCenter.getInstance();
mScoreCenter.initialize(getApplicationContext());
mScoreCenter.hello();

}

@Override
public void showDialog(final String pTitle, final String pMessage) {

if (pTitle.equals("command")&&pMessage.indexOf("showLeaderbord") >= 0) {
// ランキングを表示
mScoreCenter.show();

} else if (pTitle.equals("command")&&pMessage.indexOf("submit_score") >= 0) {
// @マークで区切ってます
String[] str = pMessage.split("@");
mScoreCenter.postScore("取得したスコアボードID", str[1]);
}
}


}


これでスコアセンターにスコアを送信することが出来ました。


音量ハードウェアキーで再生音量を調整する

iPhoneと違い、携帯についているハードウェアキーを押しても、
通話音量が変更したりして、ゲームの時に非常に使い勝手が悪いです。

そこで下記の1行を挿入すれば解決します。
これで音量ボタンを押すとゲームの再生音量が調整出来ます。


package hogehoge;

import org.cocos2dx.lib.Cocos2dxActivity;

import android.media.AudioManager;
import android.os.Bundle;

public class Hogehoge extends Cocos2dxActivity{

protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);

setVolumeControlStream(AudioManager.STREAM_MUSIC);

}

static {
System.loadLibrary("game");
}
}




アプリをSDカードにインストールする

最近androidアプリに進出を検討されている方も多いと思うので、
android独自のこれは入れとけという設定を書いていきます。

まずは、アプリをSDカードにインストールするやり方です。
本体メモリが少ない機種もあるので、SDカードに移動させるのはもはや必須といえます。
では早速行きましょう!


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hogehogeパッケージ"
android:installLocation="preferExternal"
android:versionCode="1"
android:versionName="1.0">

<uses-sdk android:minSdkVersion="8"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application android:label="@string/app_name"
android:debuggable="false"
android:icon="@drawable/icon">

省略

</application>
</manifest>


このようにandroid:installLocationで指定します。
他にもオプションがあります。

internalOnly : 内蔵メモリへのインストールのみ許可します。
auto : 内蔵メモリ優先でインストールします。しかし内蔵メモリの容量が一杯だった場合はSDカードへ保存されます。
preferExternal : SDカードを優先してインストールしますが、SDカードの容量が一杯だった場合は内蔵メモリへインストールされます。

preferExternalを選択するのが無難ですね。
しかしAndroid 2.2以上が対象なので、<uses-sdk android:minSdkVersion="8"/>にしておきます。

簡単ですね!


AppBank NetWork勉強会に行ってきた

さきほど3/1 AppBank Network 主催勉強会 @大阪 戎橋にて、アプリのプレゼン大会というお題目で登壇してきました!

今週の月曜日に自腹でkeynoteを購入して、
どうせなら登壇したいって思い、思い切って登壇申し込みしました。

何事も経験ですね〜
ではさっそく潜入レポです!多分いちばん早いレポのはず(´∀`*)ウフフ

17:00会場到着!
会場が3Fと書いてあったので行ってみたのですが、謎の隠し扉の奥の表示されていない6Fへと案内されました。
入り口でマミルトンさんに遭遇!
えらいヌンチャクケースでいちびってはりました(^_^;)

続々と登壇する人たちと名刺交換!
ツイッターで絡んでいた@sn630の中西さんと初対面!
声が渋いお方でした!

もう接しやすい人でした!
何やら書籍化を狙っているらしい…

会場はこんな感じ!
s_20130301_0.jpg

中央に居てる女性が現在ランキング1位の方です!
ソッコーで名刺交換!とても綺麗なお姉さんでした!
なんかずーと歯が痛いって言ってたw

18時30分になり村井氏が登場!
s_20130301_1.jpg

小柄なメガネボーイw

BK Software 木村氏

GPS Deloger 1.3(無料)App
発売日: 2012/06/15
カテゴリ: 写真/ビデオ, ユーティリティ
販売元: BK Software - Naoki Kimura(サイズ: 1.3 MB)
全てのバージョンの評価: (6件の評価)


GPSで位置情報が入っちゃった部分だけを消しちゃうアプリだって
村井氏が相槌を打ってくれるので、かなりやりやすかったですな〜
Windowsメインのお仕事の傍ら、iPhoneアプリ作ってるらしい。

いずれはiPhone1本で生活したいって〜
1人6分なんで直ぐに僕の出番!

麻生でホッピング 1.0.0(無料)App
発売日: 2013/02/27
カテゴリ: ゲーム, エンターテインメント, アクション, スポーツ
販売元: fuate Co., LTD. - fuate Co., Ltd.(サイズ: 5.2 MB)
全てのバージョンの評価: (9件の評価)
GameCenter対応

ステージに立つ前は凄く緊張しました!
でも立ってからは、特に問題なく婚活パーティーが役立っているのかあんまり緊張せず話せました〜
ナースの写真はやっぱり公開しませんでしたw
期待していた人ごめんなさいねm(_ _)m

村井氏が僕のナースブログを読んでいたことにびっくり仰天!
しかもappbankの中の人も何人か「がおまる」を知っていたので更にびっくりしました。
スムーズに登壇も終わり、しっかりと麻生でホッピングをアピールして来ました!
当然、昨日の収益もさらしましたよ(´∀`*)ウフフ

発表した資料はこちらです!


続いてHITPANICの河本氏

自分磨き 1.0.1(無料)App
発売日: 2012/11/11
カテゴリ: ヘルスケア/フィットネス, ライフスタイル
販売元: Yuki Kawamoto - Yuki Kawamoto(サイズ: 26.2 MB)
全てのバージョンの評価: (21件の評価)


なかなかこのアプリ面白そうでした!
村井氏との掛け合いも面白かったです!

続いてSTUDIO SHIN 北村氏「レース鳩」
iPadで動かない理由でリジェクトを食らったらしい(^_^;)
絶賛申請中!結構面白そうなアプリでした!期待!

最後にhamonさん!

はんぷく!!
hamon
平均評価:5.0(1)



この「はんぷく」ロゴがけいおん!に似ていると突っ込まれていましたが、
実は「うぽって!!」という銃器を擬人化したアニメのロゴをそのままパクったらしいw
うぽってから取ってくるとは、なかなかのアニオタな奥さんw

続いて中西さん!

俺の校長 1.4(無料)App
発売日: 2012/11/15
カテゴリ: ゲーム, エンターテインメント, ファミリー, アクション
販売元: SHUJI NAKANISHI - SHUJI NAKANISHI(サイズ: 8.9 MB)
全てのバージョンの評価: (5,352件の評価)
GameCenter対応


いくつか気になったのを箇条書き!
・ゲームは妄想でつくり上げる
 頭の中でゲームをほぼ完成まで仕上げてから、プログラミングにとりかかるらしい
・自分が遊んでいて飽きないアプリ作りを心がける
 どんなエフェクトが面白いかなど、全て頭の中で妄想
 こんなの天才肌しか無理www
・ゲームシステムから入るな!
 アイデアがおざなりになる
・インターフェースはコンセプトに合わせろ!
 最初に決めたコンセプトは絶対曲げない!
 それがたとえ既にマーケットに合ったとしても貫き通す!
・良いアイデアはじっくり寝かせる!
・手をつけはじめたら、一気に作る!
・ユーザーの事を考える!
・アップデート大事だよ!
・アプリはヘッダーファイルと、ソースファイルの2つのファイルのみ!
 他のやり方知らん!クラスってナニソレ?おいしーの?

こんな感じですね〜
全体的に天才しか出来ないようなアプリの作り方をされていました(^_^;)


再度hamonさんの登壇です!
・グルコサミンは26,000DL
・iPadでは売れてるよ、iPhoneはダメダメ(´Д⊂ヽ
・国外にもリリースしろ!
 インドで大ヒットしたアプリもある
・タブレット向けの広告単価は良い!
・iPadの総合2位の電卓アプリが抜かせないらしい
・hamonさんオススメ広告組み合わせ!
 バナー+アイコン型広告+CPI広告
 バナー+ポップアップ+Exit広告
 フルスクリーン+ポップアップ+リワード広告
アメリカ人はバナー広告慣れしてて、ほとんどクリックされないらしい(^_^;)

・バナー設置場所
 基本は上下
 下はクリック率高いけど、収益低い
 上はクリック率低いけど、収益高い!

どちらをするかはあなた次第!

最後にPDC OKINAWA

Like me! 似顔絵をつくろう らくがき風 1.1.1(無料)App
発売日: 2012/12/14
カテゴリ: エンターテインメント, 写真/ビデオ
販売元: pdc okinawa - Proto Data Center Co.,Ltd.(サイズ: 40.8 MB)
全てのバージョンの評価: (51,138件の評価)


・中古車情報誌Gooを作ってる
・Like meの現在のDLは120万DL!
・広告費0円!
 一切お金かけずに1位とれたって
 基本的に我々と同じようなレビューサイトに申請したり、Facebookやツイッターで宣言したぐらい
・渡辺直美のブログで紹介されてから一気にヒットした!
・高校生の口コミも大きかった
・大量のアイデアから一つ選ぶ
 質より量!
・昔小さな頃好きだった事を思い出してアプリ化してみる
・過去に流行ったものを思い出す
・女子会で盛り上がった中から厳選
・100個ぐらい出して、その中から厳選
・DSのともだちコレクションを意識して作った!
・とことんユーザーに伝える!
・とにかくトレンド意識!
 流行りのデザインをどんどん取り入れる
 H&Mに行って内装を観察したり、ファッション雑誌に書かれているイラストを観察
 朝の連続テレビ小説のオープニング映像を参考にしている
・今日ブルーシールというアプリがリリースされた

Tap Ice Cream ブルーシール 1.0.1(無料)App
発売日: 2013/03/01
カテゴリ: ゲーム, 教育, ファミリー, フード/ドリンク
販売元: pdc okinawa - Proto Data Center Co.,Ltd.(サイズ: 28.7 MB)
全てのバージョンの評価: (1件の評価)
GameCenter対応


最後にappbankからのお知らせ!
各コーナのPV数公開!

・無料アプリコーナー
1日3万PV 100〜2000DLされるらしい

・お昼のアプリ
1日15,000PV 200〜800DL

・無料アプリコーナー
3日掲載、350〜700DL

こんな感じでした!

また機会があれば発表したいです!
この場を借りて、会場の皆様、appbankスタッフの皆様!
素晴らしい機会を与えてくださり、誠にありがとうございました!

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。