public void onSurfaceChanged(int w, int h) {
/*
* 把起始代码放在这里, 可以避免一些屏幕尺寸问题. 因为一开始WiEngine并不知道
* SurfaceView的尺寸, 所以是假设为全屏大小. 在之后的onSurfaceChanged事件中,
* 正确的大小会被设置. 但是往往在onSurfaceChanged之前, 场景就已经被创建了,
* 所以如果因为某种原因不是全屏大小, 那么之前创建的场景位置就有误了.
*
* 由于onSurfaceChanged有可能被调用多次, 用一个标志来防止多次运行. 而且这可能
* 还不够, 有些情况下onSurfaceChanged可能连续被调用两次, 第一次传入的尺寸不对,
* 而第二次是对的. 这种情况下, 还需要做更多的检查, 可以通过尺寸大小和屏幕朝向来检查.
* 比如游戏如果是横屏的, 则w必须要大于h才认为是可以的, 反之则必须要h大于w才可以.
*/
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//上面的注释是官方的,只要把下面这两行注释掉然后添加上面哪行设置横屏的代码就可以了
// boolean landscape = getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
// if(!mStarted && (landscape && w >= h || !landscape && h >= w)) {
mStarted = true;
Director.getInstance().runWithScene(new FirstScene());
}
总算可以把屏幕设置好了,因为游戏吗大多数都是横屏过来玩的啊。
添加背景图片以及文字:
public class FirstScene extends Scene {
public FirstScene() {
WYSize s = Director.getInstance().getWindowSize();
//添加背景图片
Sprite sprite= Sprite.make(R.drawable.duck);
//设置节点位置, 根据relativeAnchorPoint标志的结果,如果是true则 表示是锚点,如果是false则表示是左下角
sprite.setPosition(s.width / 2, s.height / 2);
addChild(sprite);
//实现图片自动拉伸, 以便能适应不同的屏幕大小
//setContentSize设置节点大小
sprite.setContentSize(s.width, s.height);
//setAutoFit设置是否自动拉伸贴图以便能匹配节点大小
sprite.setAutoFit(true);
//添加文字
Label label = Label.make("Welcome to WiEngine", 20, Typeface.BOLD, "DroidSans");
//设置节点位置, 根据relativeAnchorPoint标志的结果,如果是true则 表示是锚点,如果是false则表示是左下角
label.setPosition(s.width / 2, s.height / 2);
//添加一个子节点
addChild(label);
//和BaseWYObject.autoRelease的目的相同, 这个带一个参数可以指定递归释放所有的子 节点.
//这是为了方便程序编写, 如果节点太多, 你可以只autoRelease一个顶层节点, 然后 把includeChildren设置为true.
//不过要注意, 这个方法只会autoRelease子节点, 即Node 的子类, 不会autoRelease节点附加的Action等对象,
//对于那些非Node子类的对象, 仍然需要去 调用autoRelease
//这个方法反复调用是安全的, 不会造成底层引用计数混乱.
//多余的调用会被 底层忽略. 假如某个子节点已经调用过了autoRelease, 那么那个子节点会被忽略,
//因此也是 安全的.
//参数:
//includeChildren true表示也同时释放所有子节点
autoRelease(true);
}
}
基本上都有注释了,哈哈,当然了好多注释都是官方的,我只是复制粘贴上而已。
本人只是菜鸟一枚,希望大家别喷啊,求交流,需要大牛们带领我学习WiEngine.