Java 无法使用J2ME game.canvas

Java 无法使用J2ME game.canvas,java,mobile,canvas,java-me,Java,Mobile,Canvas,Java Me,我正在为一个J2ME游戏和所有与游戏相关的功能编写代码。GameCanvas无法使用,并显示错误,导入时未显示错误,并且已通过“未使用的导入”突出显示 packageracex; 导入java.lang.*; 导入javax.microedition.lcdui.*; 导入javax.microedition.lcdui.Graphics; 导入javax.microedition.lcdui.Canvas.*; 导入javax.microedition.lcdui.Display.*; 导入j

我正在为一个J2ME游戏和所有与游戏相关的功能编写代码。GameCanvas无法使用,并显示错误,导入时未显示错误,并且已通过“未使用的导入”突出显示

packageracex;
导入java.lang.*;
导入javax.microedition.lcdui.*;
导入javax.microedition.lcdui.Graphics;
导入javax.microedition.lcdui.Canvas.*;
导入javax.microedition.lcdui.Display.*;
导入javax.microedition.lcdui.game.GameCanvas;
导入javax.microedition.lcdui.game.LayerManager;
导入javax.microedition.lcdui.game.TiledLayer;
导入javax.microedition.media.Manager;
公共类Sprite扩展RaceX实现可运行{
私有图像;
专用整数x,y,vx,vy,宽度,高度;
私有int numFrames,frame;
私有布尔可视性;
私密图像;
私人雪碧车;
私有平铺层背景;
私人最终内部道路宽度=200;
私人层经理;
国际保护区[][]={2,1,6,3},{3,4,5},{0,9,10,14};
公共雪碧(){
超级();
}
公开作废开始(){
试一试{
carImage=Image.createImage(“/car1x.png”);
}捕获(例外情况除外){}
线程运行器=新线程((可运行)此线程);
runner.start();
管理器=新层管理器();
经理。追加(背景);
}
公开募捐{
Graphics g=getGraphics();
彩绘(g);
while(true){//无限循环
//基于结构
//首先验证游戏状态
验证配子状态();
//检查用户的输入
checkUserInput();
//更新屏幕
UpdateGamesScreen(getGraphics());
//和睡眠,这是控制
//刷新速度有多快
试一试{
Thread.currentThread().sleep(30);
}捕获(例外e){}
}
}
私有void verifyGameState(){
//他什么也没做
}
私有void checkUserInput(){
int keyState=getKeyStates();
calculateCarX(键状态);
}
私有void updateGameScreen(图形g){
System.out.println(“油漆正在工作”);
g、 setColor(255255);
g、 设置行程方式(图形。虚线);
g、 抽绳(getWidth()/2,2,getWidth()/2,getHeight()-1);
构建游戏屏幕(g);
g、 设置行程方式(图形。实体);
g、 fillRect(0,0,(getWidth()-道路宽度)/2,getHeight());
g、 fillRect((getWidth()+道路宽度)/2,0,(getWidth()-道路宽度)/2,getHeight());
g、 抽绳(“分数:,(getWidth()-ROAD_WIDTH)/2+1,0,Graphics.TOP | Graphics.LEFT);
System.out.println(“油漆已完全工作”);
//flushGraphics();
}
公共屏幕(图形g){
System.out.println(“油漆正在工作”);
g、 setColor(255255);
g、 设置行程方式(图形。虚线);
g、 抽绳(getWidth()/2,2,getWidth()/2,getHeight()-1);
g、 设置行程方式(图形。实体);
g、 fillRect(0,0,(getWidth()-道路宽度)/2,getHeight());
g、 fillRect((getWidth()+道路宽度)/2,0,(getWidth()-道路宽度)/2,getHeight());
g、 抽绳(“分数:,(getWidth()-ROAD_WIDTH)/2+1,0,Graphics.TOP | Graphics.LEFT);
System.out.println(“油漆已完全工作”);
背景漆(g);
}
私有void calculateCarX(int-keyState){
//确定移动和更改对象的方式
//x坐标相应
如果((按下键状态和左键)!=0){
carX-=dx;
}
如果((按下按键状态和右键)!=0,则为else{
carX+=dx;
}
}
//夫妻形象
私密图像;
//偶象坐标
私家车;
//要在x轴上移动的距离
私有整数dx=1;
//屏幕中央
公共最终整数中心_X=getWidth()/2;
公共最终整数中心=getHeight()/2;
公共空间涂料(图g){

对于(int i=0;i sprite.getX()&&xsprite.getY()&&yTry import javax.microedition.lcdui.game.*;我做了并导入了lcdui.game*,甚至更少,但它显示了“未使用的导入”Canvas和GameCanvas是抽象类,这意味着您自己的类必须扩展Canvas或GameCanvas。我猜您没有这样做,这就是为什么不使用导入。我扩展了GameCanvas,这很有效,非常感谢:D
package racex;

import java.lang.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Canvas.*;
import javax.microedition.lcdui.Display.*;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.TiledLayer;
import javax.microedition.media.Manager;



public class Sprite extends RaceX implements Runnable{

private Image image;
private int x, y,vx,vy,width, height;
private int numFrames, frame;
private boolean visibile;
private Image carImage;
private Sprite carSprite;
private TiledLayer background;
private final int ROAD_WIDTH=200;
private LayerManager Manager;
protected int areas[][]={{2,1,6,3},{3,4,4,5},{0,9,10,14}};


public Sprite(){
    super();
}




    public void start(){

    try{
carImage=Image.createImage("/car1x.png");
}catch(Exception ex){}

    Thread runner = new Thread((Runnable) this);
    runner.start();

        Manager = new LayerManager();
        Manager.append(background);


}

public void run(){
Graphics g = getGraphics();
carSprite.paint(g);

  while(true) { // infinite loop

    // based on the structure

    // first verify game state
    verifyGameState();

    // check user's input
    checkUserInput();

    // update screen
    updateGameScreen(getGraphics());

    // and sleep, this controls
    // how fast refresh is done
    try {
      Thread.currentThread().sleep(30);
    } catch(Exception e) {}

  }

}

private void verifyGameState() {
  // doesn't do anything yet
}

    private void checkUserInput(){
      int keyState = getKeyStates();
      calculateCarX(keyState);

    }

    private void updateGameScreen(Graphics g){
          System.out.println("Paint is WORKING");
  g.setColor(255,255,255);
  g.setStrokeStyle(Graphics.DOTTED);
  g.drawLine(getWidth()/2, 2, getWidth()/2, getHeight() -1); 
  buildGameScreen(g);
  g.setStrokeStyle(Graphics.SOLID);
  g.fillRect(0, 0, (getWidth()- ROAD_WIDTH)/2, getHeight());
  g.fillRect((getWidth() +ROAD_WIDTH)/2, 0, (getWidth() - ROAD_WIDTH)/2,getHeight());
  g.drawString("Score:", (getWidth()-ROAD_WIDTH)/2+1, 0, Graphics.TOP|Graphics.LEFT);
  System.out.println("Paint is Fully WORKING");
  //flushGraphics();
    }

public void buildGameScreen (Graphics g){
  System.out.println("Paint is WORKING");
  g.setColor(255,255,255);
  g.setStrokeStyle(Graphics.DOTTED);
  g.drawLine(getWidth()/2, 2, getWidth()/2, getHeight() -1); 

  g.setStrokeStyle(Graphics.SOLID);
  g.fillRect(0, 0, (getWidth()- ROAD_WIDTH)/2, getHeight());
  g.fillRect((getWidth() +ROAD_WIDTH)/2, 0, (getWidth() - ROAD_WIDTH)/2,getHeight());
  g.drawString("Score:", (getWidth()-ROAD_WIDTH)/2+1, 0, Graphics.TOP|Graphics.LEFT);
  System.out.println("Paint is Fully WORKING");

  background.paint(g);

}
private void calculateCarX(int keyState) {

  // determines which way to move and changes the
  // x coordinate accordingly
  if((keyState & LEFT_PRESSED) != 0) {
    carX -= dx;
  }
  else if((keyState & RIGHT_PRESSED) != 0) {
    carX += dx;
  }

}

// the couple image
private Image coupleImg;

// the couple image coordinates
private int carX;


// the distance to move in the x axis
private int dx = 1;

// the center of the screen
public final int CENTER_X = getWidth()/2;
public final int CENTER_Y = getHeight()/2;




public void paint (Graphics g){
        for (int i=0; i<areas.length; i++)
{
g.setClip(areas[i][0], areas[i][1], areas[i][2], areas[i][3]);
g.setClip(x, y, width, height);
g.drawImage(image, x-frame*width, y, Graphics.TOP | Graphics.LEFT);

//g.setClip(0, 0, Cache.width, height);
}
    } // Paint Brackets

public boolean collide(Sprite sprite){
if ((x+width) > sprite.getX() && x < sprite.getX() && (y+height)>sprite.getY() && y<sprite.getY()) 
    return true;
return false;
}


}