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
- CocosEditor-java中的android项目传数据给Java项目(NodeReader相关)
- CocosEditor-java
- CocosEditor-java ListView显示
- Java项目打包相关
- 给java项目配置jdk
- 给java项目改名字
- CocosEditor-java 图层问题
- CocosEditor-java onContactBegin无反应
- CocosEditor-java 之PolygonShape错误
- Android 项目中的R.java文件
- android项目导入java项目
- Java项目中的分包
- 项目中的java集锦
- java中的项目!
- Java项目中的分包
- Java项目中的classpath
- java项目中的路径
- java项目中的加密
- POJ2396 Budget 【带下界的最大流】
- 【Java】【SSH】Web 开发经典框架Spring+Struts+Hibernate官方网站下载地址
- Team Foundation Server BuilderService LOG
- java基础知识复习总结--增强型for循环
- 随想录(提高代码质量的几个工具)
- CocosEditor-java中的android项目传数据给Java项目(NodeReader相关)
- java进程间通信:
- 不用‘+’实现加法运算
- 705 - Slash Maze
- java多线程总结:
- 字符全排列、全组合以及相关问题
- NYOJ 题目757 期末考试(贪心)
- Swift泛型(Generics)
- Android动画浅析