CocosEditor-java中的android项目传数据给Java项目(NodeReader相关)

来源:互联网 发布:网络泄露个人隐私 编辑:程序博客网 时间:2024/05/21 12:47

以下介绍三种方法,给出大概思路:

1.用回调函数的办法,基于helloWorld写了个中介类。可以在Activity中更新数据,在Cocos2d中刷新数据。如下

package org.ccj.game.hello;import org.ccj.Logger;/** * Created by Administrator on 2014/10/3. */public class ActivityController {    public int getScore() {        return mScore;    }    public void setScore(int pScore) {        mScore = pScore;        if(mCallback!=null){            Logger.log("mCallback!=null");            mCallback.onChangeCallback();        }    }    private int mScore;    static boolean CALLBACK_SETTED;    private static ActivityController mController;    private onChangeCallback mCallback;    public static ActivityController getInstance(){        if(mController == null){            mController = new ActivityController();        }        return mController;    }    public void setChangeCallback(onChangeCallback callback){        mCallback = callback;    }}

接口类

package org.ccj.game.hello;/** * Created by Administrator on 2014/10/3. */public interface onChangeCallback {    public void onChangeCallback();}

有了这两个类,就可以在Activity中操作cocos2d的项目变更了。

一般情况下Activity没办法控制SceneController.java(默认类),但利用回调,就可以,SceneController.java初始化如下

package org.ccj.game.hello;import org.ccj.Director;import org.ccj.Logger;import org.ccj.base.Color3B;import org.ccj.base.Ref;import org.ccj.d2.Label;import org.ccj.d2.Node;import org.ccj.d2.Sprite;import org.ccj.d2.action.RepeatForever;import org.ccj.d2.action.RotateBy;import org.ccj.d2.action.ScaleTo;import org.ccj.d2.action.Sequence;import org.ccj.editor.cce.Action;import org.ccj.editor.cce.Bind;import org.ccj.editor.cce.NodeController;/** */public class SceneController extends NodeController{    @Bind()    public Sprite bgSprite;   /* @Bind()    public Label scoreLabel;*/    public ActivityController mController;    @Override    public void onEnter() {        super.onEnter();        bgSprite.runAction(Sequence.create(ScaleTo.create(0.5f, 0.3f), ScaleTo.create(0.5f, 1f)));        bgSprite.setColor(new Color3B(50, 100, 30));        mController = ActivityController.getInstance();        org.ccj.Logger.log("onEnter");        mController.setChangeCallback(new onChangeCallback() {            @Override            public void onChangeCallback() {                int _Score = mController.getScore();                //setScore(_Score);            }        });        org.ccj.Logger.log("mController.setChangeCallback");        mController.CALLBACK_SETTED=true;    } /*   public void setScore(int score){        scoreLabel.setString(score+"");    }*/    @Override    public void onExit() {        super.onExit();    }    @Override    public void onUpdate(float delta) {        super.onUpdate(delta);    }    @Bind("closeButton")    @Action(Action.ActionType.WidgetTouchUp)    public void onCloseClicked(Ref ref) {        Logger.log("count==" + owner.getChildrenCount());        if(owner.getChildrenCount()<=1) {            Director.getInstance().end();        }        int counts = owner.getChildrenCount();        for (int i = 0; i < counts; i++) {            owner.removeChildByTag(101);        }    }}

Activity类

package org.ccj.game.hello;/** *  Copyright(c) Shanghai YiJun Network Technologies Inc. All right reserved. */import android.os.Bundle;import android.util.Log;import org.ccj.android.CocosJavaActivity;/** * - * -Game Engine:Cocos2d-Java * - * -Game Develop Tool:CocosEditor * - * -Doc Links * http://www.cocoseditor.com/ (Office Website) * http://blog.makeapp.co/ (Office Blog( * http://blog.csdn.net/touchsnow (csdn Blog) * https://github.com/makeapp      (github) * - * -Support * E-Mail:  zuowen@makeapp.co * QQ    :  232361142 */public class GameActivity        extends CocosJavaActivity {    static String TAG = "GameActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Log.e(TAG,"onCreate");        new Thread(new ScoreRun()).start();    }    public class ScoreRun implements Runnable{        int score;        public ScoreRun(){score = 0;}        @Override        public void run() {            ActivityController controller = ActivityController.getInstance();            while(!ActivityController.CALLBACK_SETTED){                Log.e(TAG,"sleep");                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }            while(true){                Log.e("GameActivity", score + "");                controller.setScore(score);                score++;                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }    }    public void main(String[] strings) {        Main.main(strings);    }    public void onBackPressed() {        finish();    }}
2.获取控件(NodeReader.create()相关)

后来发现,在Activity中,也可以用下面方法获得控件,但是我刷新控件值时候,会报错,暂时还没解决。据说是多线程造成的,可能是Activity和Java项目同时操作这个控件了。synchronize了mLabel后发现永远不会有机会执行。看来要研究下多线程的设计。

10-03 21:46:08.949  22181-22181/org.ccj.game.hello E/GameActivity﹕ handle msg
10-03 21:46:08.949  22181-22181/org.ccj.game.hello A/libc﹕ Fatal signal 11 (SIGSEGV) at 0x3f800000 (code=1), thread 22181 (.ccj.game.hello)

mScene = NodeReader.create().readScene("layouts/main.cce");Log.e(TAG, mScene.toString());mLayer = Layer.cast(mScene.getChildByName("mainLayer"));Log.e(TAG,mLayer.toString());mLabel = Label.cast(mLayer.getChildByName("scoreLabel"));Log.e(TAG,mLabel.toString());float x = mLabel.getPosition().getX();float y = mLabel.getPosition().getY();
运行结果
10-03 21:46:07.949  22181-22220/org.ccj.game.hello E/GameActivity﹕ org.ccj.Scene[address=0x76e8a9f0,position=0,limit=0,capacity=0,deallocator=null]10-03 21:46:07.949  22181-22220/org.ccj.game.hello E/GameActivity﹕ org.ccj.d2.Layer[address=0x76e8ac20,position=0,limit=0,capacity=0,deallocator=null]10-03 21:46:07.949  22181-22220/org.ccj.game.hello E/GameActivity﹕ org.ccj.d2.Label[address=0x76e8c440,position=0,limit=0,capacity=0,deallocator=null]10-03 21:46:07.949  22181-22220/org.ccj.game.hello E/GameActivity﹕ x = 101.0|y= 96.010-03 21:46:07.949  22181-22220/org.ccj.game.hello E/GameActivity﹕ 0
3.调用FunctionFactory。这个还没试过,看了下源码,应该可行。

0 0
原创粉丝点击