LGame的自学日志——小球回弹

   现在我要设计一个场景,让屏幕中的一个小球在屏幕范围内来回弹跳,角色很简单,就是一个球而已,而我们现在要做的,就是学习如何构建基础的游戏结构

看过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

	}

}


 

至此,完成了这个小程序,希望有其他发现的大侠们告知还有没有其他地方法

 

最后,建议直接在真机上测试,模拟器实在太慢了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值