⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vadercanvas.java

📁 一个不错的动作类游戏
💻 JAVA
字号:


/**
 * <p>Title: DemoVaders</p>
 * <p>Description: Building multiple UI Java MIDlets on Symbian OS.</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: Symbian Ltd</p>
 * @author Alan Newman - alan@sensibledevelopment.net
 * @version 1.0
 */

import javax.microedition.lcdui.*;
import java.io.IOException;

public class VaderCanvas extends Canvas implements Runnable
{
  //private Command exit;
  private DemoVaders midlet;
  private VaderManager layerManager;
  private Thread thread;
  private boolean running;
  private final int SLEEP = 10;
  public int height=0;
  Graphics graphics;
  private long startTime;
  private long totalFrameRate=0;
  private long averageFrameRate=0;
  private long totalMemory=1;
  private long freeMemory=1;
  private long memoryUsage=0;
  private long totalMemoryUsage=0;
  private long memoryHigh=0;
  private long memoryLow=0;
  private int loopCount=1;
  private long averageMemoryUsage=0;
  private int loops;
  protected final long LOOPS=10;

  public VaderCanvas(DemoVaders midlet) throws IOException
  {
    this.midlet = midlet;
    //height=getHeight();
    // initialize the layer manager
    layerManager=new VaderManager(this);     
  }

  public boolean isRunning()				{return running;}  
  public void setRunning(boolean run)		{running=run;}  
  public long getAverageFrameRate()			{return averageFrameRate;}
  public long getMemoryHigh()				{return memoryHigh;}
  public long getMemoryLow()				{return memoryLow;}
  public long getAverageMemoryUsage()		{return averageMemoryUsage;}  

  synchronized void start()
  {    
    running=true;
    thread=new Thread(this);
    thread.start();  
  }
  
  public void run()
  {
    try
    {
      loops=0;
      startTime = System.currentTimeMillis();
      totalMemory=Runtime.getRuntime().totalMemory();
      memoryLow=totalMemory;
      
      while (running)
      {
        setPerformance();
        repaint(0,0,getWidth(), getHeight());  
        // call the method to update the display.
        tick();        
        // pause the thread for length of time.
        Thread.sleep(SLEEP);
      }
    }
    catch(InterruptedException ie)
    {
      System.out.println(ie.toString());
    }
  }

  synchronized void stop()
  {
    running=false;
  }
  
  private void setPerformance()
  {
  	if(++loops>=LOOPS)
    {  
    	// get the system now for later comparison
		long now=System.currentTimeMillis();
		
		// compare 'now' to when the clock was set
		// we have used 10000 instead of 1000, to give us a 'decimal point' (no floating pt!)
    	totalFrameRate+=(10000/((now-startTime)/LOOPS));
    	
		// capture the amount of free memory left
    	freeMemory=Runtime.getRuntime().freeMemory(); 
    	
		//calculate the percentage of used memory
    	memoryUsage=(100-((freeMemory*100)/totalMemory));
    	
		// store total memory, and instances, for calculation of 
		// average
    	totalMemoryUsage+=memoryUsage;
    	
    	
		// work out the memory high and low figures
    	if(memoryUsage>memoryHigh)
    	{
    		memoryHigh=memoryUsage;
    	}
    	if(memoryUsage<memoryLow)
    	{
    		memoryLow=memoryUsage;
    	}
    	
		// calculate the average memory consumption
    	averageMemoryUsage=totalMemoryUsage/loopCount;
    	
    	// calculate the average frame rate
    	averageFrameRate=totalFrameRate/loopCount;
    	
    	// increase the number of captures by one
    	loopCount++;  
    	// reset the clock for the next batch of frames
    	startTime = System.currentTimeMillis();
    	loops=0;
    } 
  }
  private void tick()
  {
    layerManager.tick();
  }
  
  public void paint (Graphics g)
  {    
    draw(g);
  }
  
  private void draw(Graphics g)
  {
    // paint the sprites and other graphics to the screen
    layerManager.paint(g);
    serviceRepaints();     
  }
  
  
  
  public void keyPressed(int keyCode)
  {    
    
    if(getGameAction(keyCode)==LEFT)
  	{
  		layerManager.doGameAction(LEFT);  	
  	}
  	else if(getGameAction(keyCode)==RIGHT)
  	{
  		layerManager.doGameAction(RIGHT);  	
  	}
  	else if(getGameAction(keyCode)==FIRE)
  	{
  		layerManager.doGameAction(FIRE);  	
  	}
 	
  }
 
  public void keyRepeated(int keyCode)
  {    
    if(getGameAction(keyCode)==LEFT && hasRepeatEvents())
  	{
  		layerManager.doGameAction(LEFT);  	
  	}
  	else if(getGameAction(keyCode)==RIGHT && hasRepeatEvents())
  	{
  		layerManager.doGameAction(RIGHT);  	
  	} 	
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -