朋友们,我想问个关于J2me的问题,希望懂的朋友给指点一下,谢谢啦
我做的是个手机游戏,一个是medlet,一个是canvas类的游戏菜单,一个是GameCanvas类的游戏,我想从canvas新游戏项点击fire进入gamecanvas...
我做的是个手机游戏,一个是medlet,一个是canvas类的游戏菜单,一个是GameCanvas类的游戏,我想从canvas新游戏项点击fire进入gamecanvas界面,和canvas退出项点击fire返回medlet,希望懂的朋友给我指点一下,这个应该怎么写,谢谢了!!!
展开
展开全部
在canvas 类中,做一下按键处理,点击 fire键的时候,Display.getDisplay(this).setCurrent(new GameCanvas()); 返回来的时候也是这样。不过你最好做成状态,只需要刷新屏幕就行了。
追问
if(this.getGameAction(keyCode)==Canvas.FIRE)
{ if(key_i==1)
{ Display.getDisplay(midlet).setCurrent(new horseCanvas(display));
canvas.start();
repaint(); }
}
这是写在canvas里的游戏菜单,我点击fire,且key_i==1选项为新游戏时,命名为horseCanvas的gameCanvas出现,代码没提示错误,但运行时抛java.lang.NullPointerException错误,可以帮我看看吗?
追答
{ Display.getDisplay(midlet).setCurrent(new horseCanvas(display));
canvas.start();
repaint(); }
你要么不用GameCanvas,直接都用Canvas,用状态做,在不同的状态绘制不同的内容。现在你既然用了Display.getDisplay(midlet).setCurrent(new horseCanvas(display)); 就说明当前显示的屏幕为 GameCanvas,那么就不要再加上 后面的
canvas.start();
repaint(); }
你若是在GameCanvas中有线程,只需在GameCanvas中的构造方法中加上启动该线程即可。
亚远景信息科技
2024-12-11 广告
2024-12-11 广告
上海亚远景信息科技有限公司是国内汽车行业咨询及评估领军机构之一,深耕于ASPICE、敏捷SPICE、ISO26262功能安全、ISO21434车辆网络安全领域,拥有20年以上的行业经验,专精于培训、咨询及评估服务,广受全球车厂及供应商赞誉,...
点击进入详情页
本回答由亚远景信息科技提供
展开全部
还不明白加我!
点我名字-加为好友!
(这是百度HI的好友)
点击看下大图,看你能不能明白!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你好!我也是搞手机游戏的。
个人感觉游戏菜单和游戏没必要分成两个类,因为每增加一个类虚拟机就会开辟一块新的内存,这样就会增加系统开销,并且增加了代码的复杂性。
如果非要这样的话,代码如下:
/////////////////////////////canvas/////////////////////////////
public void keyPressed(int keyCode) {
int key = this.getGameAction(keyCode);
if(key == Ganvas.FRIE) {
//在medlet里写一个静态的方法getDisplay()
medlet.getDisplay().setCurrent(gc); //gc是gamecanvas的实例
}
}
你的medlet应该是游戏入口类,继承自MIDlet吧?
只有Displayable及其子类可以显示在屏幕上,所以你的medlet应该是继承自Displayable或者其子类,或者在其中定义了一个Displayable或其子类的实例,
例如:public Form f = new Form("Form");
////////////////////////gameCanvas/////////////////////
public void keyPressed(int keyCode) {
int key = this.getGameAction(keyCode);
if(key == Ganvas.FRIE) {
medlet.getDisplay().setCurrent(medlet.f); }
}
个人感觉游戏菜单和游戏没必要分成两个类,因为每增加一个类虚拟机就会开辟一块新的内存,这样就会增加系统开销,并且增加了代码的复杂性。
如果非要这样的话,代码如下:
/////////////////////////////canvas/////////////////////////////
public void keyPressed(int keyCode) {
int key = this.getGameAction(keyCode);
if(key == Ganvas.FRIE) {
//在medlet里写一个静态的方法getDisplay()
medlet.getDisplay().setCurrent(gc); //gc是gamecanvas的实例
}
}
你的medlet应该是游戏入口类,继承自MIDlet吧?
只有Displayable及其子类可以显示在屏幕上,所以你的medlet应该是继承自Displayable或者其子类,或者在其中定义了一个Displayable或其子类的实例,
例如:public Form f = new Form("Form");
////////////////////////gameCanvas/////////////////////
public void keyPressed(int keyCode) {
int key = this.getGameAction(keyCode);
if(key == Ganvas.FRIE) {
medlet.getDisplay().setCurrent(medlet.f); }
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
还不明白加我!
点我名字-加为好友!
(这是百度HI的好友)
点击看下大图,看你能不能明白!
点我名字-加为好友!
(这是百度HI的好友)
点击看下大图,看你能不能明白!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询