Matt02's Note

仕事関係。Android、Unity、cocos2d-xに関してのメモを書いていきます。

【cocos2d-x】【Android】Android5.0(Lolipop)においてcocos2d-xが動かないときにすること

最初からAndroid5.0(Lolipop)な端末だと、ビルトインメディアプレーヤーがAwsomePlayerではなく、NuPlayerというのが選択されているっぽい、、
で、Music鳴らすときに悪さしている…StartとResetを繰り返してしまう…

今回修正する箇所はCocos2dxMusic.java

if (this.mBackgroundMediaPlayer == null) {
	Log.e(Cocos2dxMusic.TAG, "playBackgroundMusic: background media player is null");
} else {
	// if the music is playing or paused, stop it
	if (this.mBackgroundMediaPlayer.isPlaying()) {
	this.mBackgroundMediaPlayer.pause();
}
this.mBackgroundMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

	@Override
	public void onPrepared(MediaPlayer mp) {
		// TODO Auto-generated method stub
		mp.seekTo(0);
		mp.start();
	}});
 	this.mBackgroundMediaPlayer.setLooping(isLoop);

	try {
 		this.mBackgroundMediaPlayer.prepare();
		//this.mBackgroundMediaPlayer.seekTo(0);
		//this.mBackgroundMediaPlayer.start();
 
 		this.mPaused = false;
 	} catch (final Exception e) {
 		Log.e(Cocos2dxMusic.TAG, "playBackgroundMusic: error state");
 	}
}
private MediaPlayer createMediaplayerFromAssets(final String pPath) {
    MediaPlayer mediaPlayer = new MediaPlayer();
	try {
		if (pPath.startsWith("/")) {
 			mediaPlayer.setDataSource(pPath);
 		} else {
			final AssetFileDescriptor assetFileDescritor = this.mContext.getAssets().openFd(pPath);
			mediaPlayer.setDataSource(assetFileDescritor.getFileDescriptor(), assetFileDescritor.getStartOffset(), assetFileDescritor.getLength());
 		}

//		mediaPlayer.prepare();
 
 		mediaPlayer.setVolume(this.mLeftVolume, this.mRightVolume);
 		} catch (final Exception e) {
 			mediaPlayer = null;
 			Log.e(Cocos2dxMusic.TAG, "error: " + e.getMessage(), e);
 		}
 		return mediaPlayer;
 	}

こんな感じにすれば動くはず

【cocos2d-x】【Android】setDimensionsで改行する際に1文字抜けてしまうときにすること

Cocos2dxBitmap.java内の300行目くらいにある

while (pString.indexOf(i++) == ' ') {
    ;
}


↑こんな感じになっているところを↓のように変える

while (pString.indexOf(i) == ' ') {
    ++i;
}

これでなおる…はず。

【Unity】"count <= std::numeric_limits<UInt16>::max()とか出たら…

作成中のアプリで、GETで取ってきたJSONをローカルに保存し、それを読み込む処理のところでこんなエラーが出て読み込み途中で進まなくなってしまった…

 

"count <= std::numeric_limits<UInt16>::max()

maxVertices < 65536 && maxIndices < 65536*3

 

停止しても吐き出され続けるので結構焦っていたのだが、、

まず、ググって出てきた方法はUnityエディタ上でGameSceneをCloseTabして、再度表示させるということだった。使ってるUnityのバージョンはこの記事を書いている現時点で一番新しい物なので、まあそんなことやっても治らないだろうと思ってやってみた。。

 

やっぱり治らない。

 

次に、このエラーが出ている直近のソースをきれいにした。特にデバッグログを入念にコメントアウトした。そしたら動いた!!

Debug.Log();がくせ者で、ローカルにあるJsonファイルを読み込んでログに出していたのだが、データ量が多すぎてダメだったぽい。。ログ出すときは気をつけよ。。

確か、Debug.Log();の限界文字数は15000文字までっぽい(確証なし

【Unity】【NGUI】ボタンをクリックする度に選択・非選択を切り替えて色を変える

//NGUIで作成したボタンに付けたスクリプトに書いてるイメージ(適当

//UIButtonのOnClickに自身のオブジェクトぶっこむ

//NGUIのColliderをアタッチすることを忘れない

public void SetSelect(){
    isSelectLock = !isSelectLock;
    Debug.Log ("isSelectLock = " + isSelectLock);

    if (isSelectLock) {
        //黒くする
        this.GetComponent<UIButton> ().defaultColor = new Color (0.5f, 0.5f, 0.5f);
    } else {
        //元に色に戻す
        this.GetComponent<UIButton> ().defaultColor = new Color (1.0f, 1.0f, 1.0f);
    }

}