怎样实现3D菜单中单击中间键跳转到相应界面

问题描述

我的代码如下,怎样实现单击中间键实现页面跳转呢,确切的说在keyPressed()方法或menuSelect()方法中代码该怎样写呢importjavax.microedition.midlet.*;importjavax.microedition.lcdui.*;importjavax.microedition.lcdui.game.*;importjavax.microedition.m3g.*;importjavax.microedition.m3g.Camera;publicclassMenuCanvasextendsGameCanvasimplementsRunnable{privateStarHScrollerscroller;//scrollstarsonthescreen.privateAlertalert;//displayinfotextonthescreenprivateGraphics3Dg3d;privateWorldworld;privateMeshmesh;privateCameracamera;//Theappearancesisusedforeachmenutexture.privateAppearanceappearance1;privateAppearanceappearance2;privateAppearanceappearance3;privateAppearanceappearance4;privatefinalintWIDTH,HEIGHT;//thecanvassize//themenueoptionsprivateString[]menu=newString[]{"Playgame","Highscores...","About...","Help...","Options...","Quit"};privatefinalintMENU_SIZE=menu.length;privateTexture2D[]texMenu=newTexture2D[MENU_SIZE];privateintindex=0;//menuindexprivateintface=0;//cubeface0-3//thecurrentangleofthemenu.privateintmenu_angle=0;privateintmenu_rot=0;//-1or1privateUIcontrolleruicontroller;privateChess_MIDletmidlet;publicMenuCanvas(UIcontrolleruicontroller){super(false);this.uicontroller=uicontroller;//midlet=m;setFullScreenMode(true);WIDTH=getWidth();HEIGHT=getHeight();g3d=Graphics3D.getInstance();world=newWorld();camera=newCamera();camera.setPerspective(60.0f,(float)WIDTH/(float)HEIGHT,0.1f,50.0f);world.addChild(camera);world.setActiveCamera(camera);mesh=MC.createItem();//createthemenumeshmesh.translate(0.0f,-3.0f,-11.0f);//menupositionworld.addChild(mesh);appearance1=mesh.getAppearance(0);//frontappearance2=mesh.getAppearance(1);//backappearance3=mesh.getAppearance(4);//topappearance4=mesh.getAppearance(5);//bottom//generatethemenutexturestouse.createTextures();scroller=newStarHScroller(WIDTH,HEIGHT);newThread(this).start();}/**Createonetextureforeachoptioninthenenu.*/privatevoidcreateTextures(){Imageimage;try{for(inti=0;i<menu.length;i++){image=createMenuImage(menu[i]);//createanimagefromtexttexMenu[i]=newTexture2D(newImage2D(Image2D.RGB,image));texMenu[i].setFiltering(Texture2D.FILTER_LINEAR,Texture2D.FILTER_LINEAR);texMenu[i].setWrapping(Texture2D.WRAP_CLAMP,Texture2D.WRAP_CLAMP);}}catch(Exceptione){e.printStackTrace();}appearance1.setTexture(0,texMenu[0]);appearance3.setTexture(0,texMenu[1]);appearance4.setTexture(0,texMenu[5]);}/**Createanimagefromthetextsenttothemethod*/privateImagecreateMenuImage(StringimgStr){intbgColor=0xFFFFFF;intfgColor=0x00;Stringmenu;Fontf=Font.getDefaultFont();Imageimage=null;try{ImagebgImage=Image.createImage("/menubg.png");image=Image.createImage(128,32);Graphicsg=image.getGraphics();g.setFont(f);g.setColor(bgColor);g.fillRect(0,0,image.getWidth(),image.getHeight());g.drawImage(bgImage,0,0,0);g.setColor(fgColor);menu=imgStr;g.drawString(menu,image.getWidth()/2-f.stringWidth(menu)/2,7,Graphics.TOP|Graphics.LEFT);}catch(Exceptione){e.printStackTrace();}returnimage;}/**whenthemenuisrotatingthetexturesonthecubeischanging.*/privatevoidchangeTextures(){intfront,top,bottom;front=top=bottom=0;Appearancef,t,b;f=appearance1;t=appearance3;b=appearance4;//keeptrackofwhichappearanceisactuallyfacingthescreen.switch(face){case0:f=appearance1;t=appearance3;b=appearance4;break;case1:f=appearance3;t=appearance2;b=appearance1;break;case2:f=appearance2;t=appearance4;b=appearance3;break;case3:f=appearance4;t=appearance1;b=appearance2;break;}front=index;top=index<MENU_SIZE-1?index+1:0;bottom=index>0?index-1:MENU_SIZE-1;//setthetextureforanappearancef.setTexture(0,texMenu[front]);t.setTexture(0,texMenu[top]);b.setTexture(0,texMenu[bottom]);}/**Therenderingmethod.*/publicvoiddraw3D(Graphicsg){try{g3d.bindTarget(g);g3d.render(world);}catch(Exceptione){e.printStackTrace();}finally{g3d.releaseTarget();}}/**Usedwhenthefirebuttonispressed*/privatevoidmenuSelect(){switch(index){case0://displaythetextonthescreen.alert.setText("StartGame");alert.start();break;case1:alert.setText("Highscores");alert.start();break;case2:alert.setText("About");alert.start();break;case3:alert.setText("Help");alert.start();break;case4:alert.setText("Options");alert.start();break;case5://Exit//midlet.notifyDestroyed();break;}}publicvoidkeyPressed(intkey){System.out.println(key);switch(key){case-1://UPif(menu_rot==0){index=index>0?index-1:MENU_SIZE-1;face=face>0?face-1:3;menu_rot=-3;}break;case-2://DOWNif(menu_rot==0){index=index<MENU_SIZE-1?index+1:0;face=face<3?face+1:0;menu_rot=3;}break;case-5://FIREmenuSelect();//调用按钮选择break;}System.out.println("index:"+index);}publicvoidkeyRepeated(intkey){keyPressed(key);}publicvoidrun(){Graphicsgraphics=this.getGraphics();alert=newAlert();intexitCounter=0;floatexitSpeed=1.0f;while(true){//rotatethemenu.if(menu_rot!=0){menu_angle+=menu_rot;mesh.postRotate(menu_rot,1.0f,0.0f,0.0f);if(menu_angle%90==0){menu_rot=0;changeTextures();//调用changeTextures()}}draw3D(graphics);//drawthealerttextif(alert.isStarted()){alert.draw(graphics);}scroller.draw(graphics);flushGraphics();try{Thread.sleep(10);}catch(Exceptione){}}}}

解决方案

解决方案二:
M3G我还没学过。。关注中…………
解决方案三:
没搞过J2ME的3D但是跳转按键处理应该和3D关系不大吧!1:用int或其他模拟选择状态当是什么状态时执行什么跳转方法就OK了啊2:把描绘的每个3D选择条看成对象,在每个选择条设置boolean在按键事件中迭代每个选择条是true的话就执行跳转方法啊。
解决方案四:
不了解额
解决方案五:
这么多代码都写出来了,页面跳转应该不是问题吧!当检测到你设定的键被按下,就设置其它的页面为可以显示的页面首先你怎么设置显示这个MenuCanvas界面的?我没看到你的MIDLet类,用同样的方法显示你想显示的界面或页面,个人认为这个与3D没有关系,只要确认该键被按下,就设另一个页面为显示页面、、、、
解决方案六:
我写了一个uicontroller类,里面写了跳转页面的方法,我在menuselect()方法中调用,没有实现页面的跳转,不知道该在哪里调用,请高手帮忙

时间: 2024-09-25 03:01:54

怎样实现3D菜单中单击中间键跳转到相应界面的相关文章

javaee-struts2的jsp里的frameset,在框架中单击submit按钮跳到另一个页面

问题描述 struts2的jsp里的frameset,在框架中单击submit按钮跳到另一个页面 我想在单击"登录"按钮后跳转到另一个jsp页面该怎么做 另一个界面就可以获取输入的用户信息 1.index.jsp 2.title.jsp 让心情去旅行 3.describe.jsp <body bgcolor="#adc5e6"> 让心情化作一抹阳光, 不要总是为了未来惆怅, 青春的步调, 总是喜欢将曲折高唱, 与其自卑自叹, 何不让心情化作一抹阳光, 飞

如何在IE右键菜单中添加菜单项

菜单|右键 如果使用过Netants的朋友可能都知道,NetAnts在IE中添加了右键菜单功能,只要在页面的一个链接或者图片上点击右键后在菜单中选择 Down By Netants 就可以调用Netants下载该链接指向的文件.在本文中作者将介绍如何通过VB来实现这样的功能. 要实现在IE右键菜单中添加菜单项的功能,要依次实现以下步骤: 1.在注册表HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt项下建立一个新项,项的名

Delphi为窗体的系统菜单中添加选项

通常在应用程序中,如果单击标题栏的左侧图标,就会弹出一个窗体的系统菜单,在其中可以完成最小化.最大化和关闭等操作.本实例将演示如何在窗体的系统菜单中添加自己的选项. 在窗体中添加一个TMainMenu组件,其中TMainMenu组件中的选项将要被添加到窗体的系统菜单中.添加组件后的窗体如图1所示. 图1 添加组件后的窗体 在TMainMenu组件生成的菜单中添加一个File菜单,在这个菜单下面添加一个Exit选项. 在本程序开始运行时就会把TMainMenu组件生成的菜单添加到窗体的系统菜单中,

win7电脑在word中输入空格键却显示点怎么办?

  都说win7 64位旗舰版iso是办公的利器,这个说法一点都不夸张,现在各行各业,还有几个是不用使用到电脑的?现在提倡的数字化办公,又怎么离得开电脑的帮助呢?而对于现在的新员工,咱们的人事最长要问到的问题便是你会使用办公软件吗?这是一个员工最起码的素质了!那么大家在使用办公软件的时候,有没有遇到什么无法解决的问题呢?今天就有一个朋友向小编提问了,说是在word中输入空格键,但是显示出来的却是一个点,遇到这样的问题,我们要如何解决呢? 1.首先,咱们在哪里出的问题,就去哪里解决,所以我们首先需

Win7在开始菜单中创建命令提示符快捷方式的方法

  1.点击"开始"→在开始菜单栏的搜索框中输入"cmd",在返回的结果中找到"cmd.exe",使用鼠标右键单击该快捷方式,在弹出菜单中选择"附到开始菜单(U)",如图1所示: 图1 右键点击附到开始菜单(U) 2.重新点击"开始",在开始菜单中,找到并选中"Windows 命令处理程序",按下鼠标右键,在右键菜单栏中选择"属性",如图2所示: 图2 右键属性Win

怎样在WinXP系统右键菜单中加入“用记事本方式打开”

  1.首先,咱们单击打开winXP电脑的开始菜单,然后从开始菜单中点击选择运行选项. 2.这样咱们就可以打开winXP系统的运行窗口了,咱们在打开的运行窗口中输入regedit并单击回车,这样就可以打开winXP系统的注册表编辑器窗口了. 3.在打开的注册表编辑器窗口中,咱们依次点击展开左侧菜单中的HKEY_LOCAL_MACHINESOFTWAREClasses*shell 主键,之后咱们单击shell这个主键;在新建一个名为 notepad的主键;在右面的窗口中;把默认项的值改成用记事本打

如何在winXP电脑的右键菜单中加入“用记事本方式打开”?

  几乎在咱们所有的Windows系统中,都存在有这个右键菜单,不过每个版本的系统中,这个右键菜单的内容可能都有些变化,小编在之前的文章中也介绍过一些可以在咱们右键菜单中加入新选项的文章,这不,今天又有一位使用winXP的用户前来咨询了,说自己在日常操作winXP电脑的过程中经常都需要使用到"用记事本方式打开",但是每次要选择打开的方式,都十分的麻烦,那么咱们是否可以在winXP系统的右键菜单中直接加入一个"用记事本方式打开"选项以方便操作呢?下面,小编就来详细的介

删除右键菜单中的选项

右键菜单中的有些选项你并不常用,或者,有些软件已被删除,但其右键菜单中的选项却仍占用着屏幕空间.要删除这些无用的右键菜单项,请按下述方法操作:       1. 单击Windows的"开始"菜单,单击"运行",在"打开"框中键入"regedit",单击"确定"按钮,打开"注册表编辑器"窗口.       2. 展开"HKEY_CLASSES_ROOT\*\shellex\Con

CB环境中实现在菜单中显示历史文件列表

本文介绍了如何在Windows环境下实现菜单中显示历史文件列表,同时概要介绍了Tregistry类的使用方法. 现在,在许多Windows应用程序都具有这样一个功能:可以在文件菜单下面显示列出最近访问过的文件,这使用户很容易再次访问曾经访问过的文件.在过去几年中,这项技术以成为拥有文件菜单项的应用程序的共同特色:如Wps系列和Office系列.在以前的DOS环境中,程序员一般通过创建一个文件用来记录文件列表:那么在Windows环境中,还有其他的方法吗?最近笔者利用C++ Builder5.0