package org.test; import loon.LSystem; import loon.LTransition; import loon.Screen; import loon.action.sprite.CanvasPlayer; import loon.canvas.Canvas; import loon.canvas.LColor; import loon.event.GameTouch; import loon.geom.RectBox; import loon.opengl.GLEx; import loon.utils.MathUtils; import loon.utils.reply.Port; import loon.utils.timer.LTimer; import loon.utils.timer.LTimerContext; public class CanvasLayerTest extends Screen { public LTransition onTransition() { return LTransition.newEmpty(); } @Override public void draw(GLEx g) { } @Override public void onLoad() { // 构建一个CanvasLayer对象,并实时渲染Canvas对象(PS:实时修改渲染对象比较耗费渲染时间,不建议在游戏中出现多个 // BTW:最主要是不同运行环境存在的差异较大,不同平台造成的帧率改变可能很多……) final CanvasPlayer canyer = new CanvasPlayer(); // 添加CanvasPlayer到Screen add(canyer); // 为Screen添加一个实时监听,用于监控CanvasPlayer的变化 add(new Port<LTimerContext>() { private int step = 20; private int direction = 1; private int color = LColor.red.getARGB(); private Canvas lastCanvas; // 每1/30秒执行一次 private LTimer timer = new LTimer(LSystem.SECOND / 30); public void onEmit(LTimerContext clock) { if (timer.action(clock)) { // 获得CanvasLayer中的Canvas lastCanvas = canyer.begin(); lastCanvas.clear(); lastCanvas.setStrokeWidth(2); lastCanvas.setStrokeColor(color); step += direction; if (step > 30) { direction = -1; } if (step < 10) { direction = 1; } // 渲染圆 final float r = 100; for (int i = 0; i < step; i++) { float angle = 2 * MathUtils.PI * i / step; RectBox viewSize = getViewRect(); float x = (r * MathUtils.cos(angle)) + viewSize.width() / 2; float y = (r * MathUtils.sin(angle)) + viewSize.height() / 2; lastCanvas.strokeCircle(x, y, 100); } // 提交Canvas的改变到当前纹理 canyer.end(); } } }); add(MultiScreenTest.getBackButton(this,0)); } @Override public void alter(LTimerContext timer) { } @Override public void resize(int width, int height) { } @Override public void touchDown(GameTouch e) { } @Override public void touchUp(GameTouch e) { } @Override public void touchMove(GameTouch e) { } @Override public void touchDrag(GameTouch e) { } @Override public void resume() { } @Override public void pause() { } @Override public void close() { } }