?? maincanvas.java
字號:
package demo;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
public class MainCanvas extends GameCanvas implements Runnable{
private boolean m_bRunning; //控制線程運行
public Sprite m_spDancer; //管理MM精靈
public ArrowSprite m_aArr_S[]; //管理靜態箭頭
public ArrowSprite m_aArr_M[]; //管理動態箭頭
public int m_aSteps[] = { //存儲舞步
1, 0, 2, 3, 1, 0, 1, 3, 0, 1, 2, 3,
3, 1, 1, 2, 1, 2, 1, 0, 1, 2, 1, 1,
0, 0, 1, 3, 0, 0, 2, 2, 1, 1, 2, 2,
1, 0, 2, 1, 3, 3, 0, 3, 0, 0, 2, 0 };
public int m_nStep = 0; //下一個舞步在m_aSteps中的索引
Player m_Player; //用于播放背景音樂
public MainCanvas(){
super(false);
try{
//讀取MM精靈圖片,設置MM精靈的參考點及位置
Image image = Image.createImage("/demo/Dancer.png");
m_spDancer = new Sprite( image, 61, 80 );
m_spDancer.defineReferencePixel( 30, 40 );
m_spDancer.setRefPixelPosition(getWidth() - 50, getHeight()/2);
//讀取箭頭圖片,創建兩種箭頭數組
Image image2 = Image.createImage("/demo/Arrow.png");
m_aArr_S = new ArrowSprite[4];
for( int n = 0; n < m_aArr_S.length; n ++ ){
m_aArr_S[n] = new ArrowSprite( image2, 15, 15 );
m_aArr_S[n].StartStatic( 15 + n * 20, 30, n );
}
m_aArr_M = new ArrowSprite[6]; //最多同時顯示6個動態箭頭
for( int n = 0; n < m_aArr_M.length; n ++ ){
m_aArr_M[n] = new ArrowSprite( image2, 15, 15 );
}
}
catch (IOException e){}
try{ //讀取音效文件,并循環播放音效
InputStream is = this.getClass().getResourceAsStream("/demo/music.wav");
m_Player = Manager.createPlayer(is,"audio/x-wav");
m_Player.setLoopCount(-1);
m_Player.start();
}
catch (IOException e){}
catch (MediaException e){}
Start(); //啟動線程
}
public void Start(){
m_bRunning = true;
Thread thread = new Thread(this); //分配新線程
thread.start(); //線程啟動
}
public void run() { //新線程自動調用此方法
//獲取系統當前時間,并將時間換算成以毫秒為單位的數
long T1 = System.currentTimeMillis();
long T2 = T1;
while(m_bRunning){
T2 = System.currentTimeMillis();
if( T2 - T1 > 100 ){ //間隔100毫秒
T1 = T2;
Input();
Logic();
Paint();
}
}
}
public void Stop(){ //終止游戲
m_bRunning = false;
}
public void Input(){
int keyStates = getKeyStates(); //得到當前按鍵狀態
m_spDancer.setFrame( 0 );
//如果按下方向鍵的上鍵,MM向上跳舞
if( ( keyStates & GameCanvas.UP_PRESSED ) != 0 )
m_spDancer.setFrame( 1 );
//如果按下方向鍵的下鍵,MM向下跳舞
if( ( keyStates & GameCanvas.DOWN_PRESSED ) != 0 )
m_spDancer.setFrame( 2 );
//如果按下方向鍵的左鍵,MM向左跳舞
if( ( keyStates & GameCanvas.LEFT_PRESSED ) != 0 )
m_spDancer.setFrame( 3 );
//如果按下方向鍵的右鍵,MM向右跳舞
if( ( keyStates & GameCanvas.RIGHT_PRESSED ) != 0 )
m_spDancer.setFrame( 4 );
}
public long m_LogicT1 = System.currentTimeMillis();
public void Logic(){
for( int n = 0; n < m_aArr_M.length; n ++ )
m_aArr_M[n].Logic();
long mT2 = System.currentTimeMillis();
if( mT2 - m_LogicT1 > 1500 ){
m_LogicT1 = mT2;
for( int n = 0; n < m_aArr_M.length; n ++ ){
if( m_aArr_M[n].isVisible() == false ){
m_aArr_M[n].StartMove( 15 + m_aSteps[n] * 20,
110, 30, 1, m_aSteps[n] );
break;
}
}
m_nStep ++;
if( m_nStep > m_aSteps.length )
m_nStep = 0;
}
}
public void Paint(){
Graphics g = getGraphics();
//用黑色清屏
g.setColor(0);
g.fillRect( 0, 0, getWidth(), getHeight() );
//顯示MM及所有箭頭圖像
m_spDancer.paint(g);
for( int n = 0; n < m_aArr_S.length; n ++ ){
m_aArr_S[n].paint(g);
}
for( int n = 0; n < m_aArr_M.length; n ++ ){
m_aArr_M[n].paint(g);
}
flushGraphics();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -