注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

AGLlib演示程序1(上)  

2011-07-05 09:31:25|  分类: AGLlib |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
该程序是使用AGLlib的演示程序,它实现了画线的功能。
在使用AGLlib库时,你的代码应该分三部分
 A 特定于平台的代码
特定于平台,AGLLib无法封装也没封装的代码应该放在此部分。
无论是Android,还是J2SE,一般建议放在com.robin.platform包下。该演示程序就是如此。
B 游戏逻辑部分
该部分主要用于逻辑处理,Android和J2SE平台应该能共享该部分代码。建议放在com.robin.game包下。
该演示程序就是如此。
C 打包资源生成的代码
对资源进行打包时。生成的关于资源索引的代码应该放在该部分,一般建议放在的com.robin.gen包下
该演示程序,并不需要外包打包文件,所以没有此包。
Android版本代码
com.robin.platform包下有3个文件:GameMain.java,MainSurfaceView.java,MainView.java。
MainSurfaceView.java,MainView.java两个中任意使用一个就可以,前者使用的是更低级的API,用的是SurfaceView,后者是使用的是更高级的API,用的是View。建议使用前者。现在默认是的也是前者。可以通过GameMain.java中的useSurfaceView常量来决定使用哪一个。
GameMain.java文件
package com.robin.platform;
import com.robin.game.LineManager;
import com.robin.lib.face.Application;
import com.robin.lib.face.GameEntity;
import com.robin.lib.face.GameView;
import com.robin.lib.core.GameEngine;
import com.robin.lib.core.Game;

import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;

public class GameMain extends Activity implements Application{
    /** Called when the activity is first created. */
 LinearLayout layoutRoot=null;
 View view=null;
 GameEngine gameEngine;
 final static boolean useSurfaceView=true;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         /**全屏设置,隐藏窗口所有装饰*/  
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,   
        WindowManager.LayoutParams.FLAG_FULLSCREEN);  
        /**标题是属于View的,所以窗口所有的修饰部分被隐藏后标题依然有效*/  
        requestWindowFeature(Window.FEATURE_NO_TITLE); 
        setContentView(R.layout.main);
        DisplayMetrics d= new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(d);
        Game.width=d.widthPixels;
        Game.height=d.heightPixels;
        if(layoutRoot==null)
         layoutRoot=(LinearLayout)findViewById(R.id.root);
        if(view==null)
        {        
         if(useSurfaceView)
          view=new MainSurfaceView(this);
         else
          view=new MainView(this);
         layoutRoot.addView(view);
        }
        if(gameEngine==null)
        {
         GameEntity lineMgr=new LineManager();
         gameEngine=new GameEngine(this,(GameView)view,lineMgr);
         gameEngine.start();
        }
        else
        {
         
        }
    }
    public void onRestart()
    {
     super.onRestart();
     gameEngine.resume();
    }
    public void onPause()
    {
     super.onPause();
     gameEngine.pause();
    }
    public void onDestroy()
    {
     super.onDestroy();
     gameEngine.stop();
     
    }
    /*
    this method is  implemented for interface Application
    */
    public void destroy()
    {
     this.finish();
    }
}
MainSurfaceView.java文件
package com.robin.platform;
import com.robin.lib.face.GameView;
import com.robin.lib.neutral.Graphics;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ConcurrentLinkedQueue;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MainSurfaceView extends SurfaceView  implements GameView,SurfaceHolder.Callback{
 public MainSurfaceView(Context context) {
  super(context);
  // TODO Auto-generated constructor stub
  surfaceHolder = getHolder() ;//取得holder,这个holder主要是对surface操作的适配,用户不具备对surface操作的权限
  surfaceHolder.addCallback(this) ; //注册实现好的callback
  //surfaceHolder.setFormat(PixelFormat.OPAQUE);
  //surfaceHolder.setFormat(PixelFormat.RGB_565);
  //surfaceHolder.setFormat(PixelFormat.RGBA_8888);
 }
 final static String tag="hubin";
 SurfaceHolder surfaceHolder;
 Canvas canvas;
 public Graphics getViewGraphics()
 {
  canvas= surfaceHolder.lockCanvas() ;      //取得画图的Canvas
  return new Graphics(canvas);
 }
 boolean isReady=false;
 public boolean isReady()
 {
  return isReady;
 }
    /*
    this method is  implemented for interface GameView
    */
 public void repaint()
 {
  surfaceHolder.unlockCanvasAndPost(canvas);
 }
    /*
    this method is  implemented for interface GameView
    */
 public boolean servicePaint()
 {
   try{
    Thread.sleep(1);
   }catch(InterruptedException e){
    e.printStackTrace();
    return false;
   }
  return true;
 }
 ArrayBlockingQueue <com.robin.lib.neutral.MotionEvent> motionEvents=
  new ArrayBlockingQueue <com.robin.lib.neutral.MotionEvent>(10);
    /*
    this method is  implemented for interface GameView
    */
 public Queue<com.robin.lib.neutral.MotionEvent> getMotionEvents()
 {
  com.robin.lib.neutral.MotionEvent event;
  int size=motionEvents.size();
  while(!motionEventBuffer.isEmpty())
  {
   
   event=motionEventBuffer.remove();
   size++;
   motionEvents.add(event);
  }
  return motionEvents;
 }
 ConcurrentLinkedQueue<com.robin.lib.neutral.MotionEvent> motionEventBuffer=new ConcurrentLinkedQueue<com.robin.lib.neutral.MotionEvent>();
    public boolean onTouchEvent(MotionEvent event) {
     com.robin.lib.neutral.MotionEvent e=new com.robin.lib.neutral.MotionEvent(event);
     motionEventBuffer.add(e);
     return true;
    }
    public void surfaceCreated(SurfaceHolder holder)
    {
     isReady=true;
    ;}
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
    {
    ;}
    public void surfaceDestroyed(SurfaceHolder sh)
    {;}
}
MainView.java文件
package com.robin.platform;
import com.robin.lib.core.Game;
import com.robin.lib.face.GameView;
import com.robin.lib.neutral.Graphics;
import com.robin.lib.neutral.Image;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ConcurrentLinkedQueue;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

public class MainView extends View  implements GameView{
 public MainView(Context context) {
  super(context);
  // TODO Auto-generated constructor stub
 }
 boolean blServiceDraw=false;
 final static int kServiceDrawTimeMax=1000;
 final static String tag="hubin";
 Image img;
 public Graphics getViewGraphics()
 {
  if(img==null)
   img=Image.createImage(Game.width, Game.height);
  return img.getGraphics();
 }
 public boolean isReady()
 {
  return true;
 }
    /*
    this method is  implemented for interface GameView
    */
 public void repaint()
 {
  blServiceDraw=true;
  this.postInvalidate();
 }
    /*
    this method is  implemented for interface GameView
    */
 public boolean servicePaint()
 {
  long startTime=System.currentTimeMillis();
  while(blServiceDraw)
  {
   try{
    Thread.sleep(10);
   }catch(InterruptedException e){
    e.printStackTrace();
    return false;
   }
   if(System.currentTimeMillis()-startTime>kServiceDrawTimeMax)
   {
    blServiceDraw=false;
    Log.e("", "the time for Serviceing Draw is too long");
    return false;
   }
  }
  return true;
 }
 ArrayBlockingQueue <com.robin.lib.neutral.MotionEvent> motionEvents=
  new ArrayBlockingQueue <com.robin.lib.neutral.MotionEvent>(10);
    /*
    this method is  implemented for interface GameView
    */
 public Queue<com.robin.lib.neutral.MotionEvent> getMotionEvents()
 {
  com.robin.lib.neutral.MotionEvent event;
  int size=motionEvents.size();
  while(!motionEventBuffer.isEmpty())
  {
   
   event=motionEventBuffer.remove();
   size++;
   motionEvents.add(event);
  }
  return motionEvents;
 }
 long averTime=0;
 long times[]=new long[4];
 int cnt=0;
 Bitmap bufferBitMap;
 protected void  onDraw  (Canvas g)
 {
  long time=System.currentTimeMillis();
  if(img!=null)
  {
   g.drawBitmap(img.getBitMap(), 0, 0, null);
  }
  Paint p=new Paint();
  p.setColor(0xFF0000FF);
  g.drawLine(0, 420, Game.width, 420, p);
  g.drawLine(0, 20, Game.width-20, Game.height, p);
  g.drawText("hello", 50, 50, p);
  blServiceDraw=false;
  time=(System.currentTimeMillis()-time);
  if(averTime==0)
   averTime=time;
  else
   averTime=(averTime+time)/2;
  //System.out.println("time:"+averTime);
 }
 ConcurrentLinkedQueue<com.robin.lib.neutral.MotionEvent> motionEventBuffer=new ConcurrentLinkedQueue<com.robin.lib.neutral.MotionEvent>();
    public boolean onTouchEvent(MotionEvent event) {
     com.robin.lib.neutral.MotionEvent e=new com.robin.lib.neutral.MotionEvent(event);
     motionEventBuffer.add(e);
     return true;
    }
}

  评论这张
 
阅读(722)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017