现在我要设计一个场景,让屏幕中的一个小球在屏幕范围内来回弹跳,角色很简单,就是一个球而已,而我们现在要做的,就是学习如何构建基础的游戏结构
看过DEMO我们知道了,LGame基本上都是由两个类组成,一个是主类,另一个就是场景类,主类负责加载场景类,所以,我们不需要像以前设计Android程序那样还要在主布局文件中设置控件,在这里,我们根本用不上这种控件
按照上一篇我说的设置好之后,改写我们的主类
package wang.test;
import org.loon.framework.android.game.LGameAndroid2DActivity;
public class TestActivity extends LGameAndroid2DActivity {
@Override
public void onGamePaused() {
}
@Override
public void onGameResumed() {
}
@Override
public void onMain() {
// 这里就是载入游戏场景的地方
initialization(true);//强制横屏
setShowFPS(true);//显示FPS
setScreen(new NewScreen());//设置需要显示的游戏场景
showScreen();//显示游戏场景
}
}
之后是我们的场景类,对于反弹我研究了好久啊,才发现问题所在
package wang.test;
import org.loon.framework.android.game.core.LSystem;
import org.loon.framework.android.game.core.graphics.Screen;
import org.loon.framework.android.game.core.graphics.component.ActorSpeed;
import org.loon.framework.android.game.core.graphics.component.LLayer;
import org.loon.framework.android.game.core.graphics.component.Speed;
import org.loon.framework.android.game.core.graphics.opengl.GLEx;
import org.loon.framework.android.game.core.input.LTouch;
import org.loon.framework.android.game.core.timer.LTimerContext;
public class NewScreen extends Screen {
//设定全局变量,获得屏幕的宽和高
int w=getWidth(),h=getHeight();
class Ball extends ActorSpeed{//创建一个球的对象,用的是 ActorSpeed,因为我只在这个类里面发现了move()的方法,其他地类都指定了运动方向
public Ball(){
super(new Speed(LSystem.random.nextInt(360), 3.0f));//设定球的运动方向和速度
setImage("assets/ball.png");//设定的球的图片
}
@Override
public void action(long elapsedTime) {//设定的球的动作
if(!getLLayer().getCollisionBox().contains(getRectBox())){//这里设定的当球的框体离开屏幕的时候发生事件,但是这里有点奇怪,我不能简单地将球的运动方向设为负数
if(getX()<=0 || getX()>=w-getWidth()){//在横向运动的方向我必须设定成180-方向才能正确获得运动的方向,否则会穿过屏幕
getSpeed().setDirection(180-getSpeed().getDirection());
move();
}
else{//将横向运动单独设定之后,纵向运动的可以直接将运动的方向设为负数了
getSpeed().setDirection(-getSpeed().getDirection());
System.out.println(getX()+"___________"+getY());
move();
}
}
else {
move();
}
super.action(elapsedTime);
}
}
@Override
public void onLoad() {//这里要复写onLoad的方法,表示在场景载入的时候调用
LLayer layer=new LLayer(w, h, false);//创建一个图层,大小为屏幕大小
Ball ball=new Ball();//创建一个球的对象
layer.addObject(ball, 50, 90);//在图层中添加球的对象,后面的是坐标
add(layer);//最后添加图层进场景
super.onLoad();
}
@Override
public void alter(LTimerContext arg0) {
// TODO Auto-generated method stub
}
@Override
public void draw(GLEx arg0) {
// TODO Auto-generated method stub
}
@Override
public void touchDown(LTouch arg0) {
// TODO Auto-generated method stub
}
@Override
public void touchMove(LTouch arg0) {
// TODO Auto-generated method stub
}
@Override
public void touchUp(LTouch arg0) {
// TODO Auto-generated method stub
}
}
至此,完成了这个小程序,希望有其他发现的大侠们告知还有没有其他地方法
最后,建议直接在真机上测试,模拟器实在太慢了