- 浏览: 197232 次
- 性别:
- 来自: 湖南
文章分类
最新评论
CanvasCanvas绘图
画布属于低级界面
Canvas的结构以及paint函数;showNotify,hideNotify函数
设置画布全屏:setFullScreenMode(booleanmode)
得到高度,宽度:getHeight,getWidth
在画布上绘制
设置绘图颜色:Graphics.setColor:格式0xRRGGBB或者传入数字
设置划线样式:Graphics.setStrokeStyle
SOLID:实线;DOTTED:虚线
画直线:Graphics.drawLine
画矩形/实心矩形:Graphics.drawRect/fillRect
画圆角矩形/圆角实心矩形:Graphics.drawRoundRect/fillRoundRect
画弧线/填充弧线:Graphics.drawArc/fillArc
填充三角形:Graphics.fillTriangle
强制重画:Graphics.repaint
在画布上绘制:字符串和图片
修改字体:Graphics.setFont()
画字符串:Graphics.drawString()
确定定位点: LEFT,HCENTER,RIGHT | BOTTOM,TOP,BASELINE
通过font来得知字符串所占的宽度
例如:将字画在屏幕正中心
画图片:
Graphics.drawImage
Graphics.drawRegion
按键和指针事件
按键事件
相应函数
protected voidkeyPressed(int keyCode) :按下某个键
protected voidkeyReleased(int keyCode) :释放某个键
protected voidkeyRepeated(int keyCode):一直按某个键
键的代码由常量决定
特殊键被认为是游戏键,需要转为游戏键才能进行判断
getGameAction(keyCode)
getKeyCode(action)
映射关系: 上下左右和手机上的上下左右键一致,GAME_A,B,C,D分别对应1,3,7,9键
指针事件
利用hasPointerEvents和hasPointerMotionEvents判断是否支持指针
相应函数
protected voidpointerDragged(intx,inty)
protected voidpointerPressed(intx,inty)
protected voidpointerReleased(intx,inty)
案例
动画模拟
界面上有个小红球,要求能够慢慢掉下来然后弹起来
额外要求:增加暂停和继续的功能
界面上每秒钟在随机位置出现随机颜色的数字0-9,要求用户快速反应,按下按键,如果按对,加1分,错误减2分,不按减1分,初始5分,减到0分,提示用户输了。
画布属于低级界面
Canvas的结构以及paint函数;showNotify,hideNotify函数
设置画布全屏:setFullScreenMode(booleanmode)
得到高度,宽度:getHeight,getWidth
在画布上绘制
设置绘图颜色:Graphics.setColor:格式0xRRGGBB或者传入数字
设置划线样式:Graphics.setStrokeStyle
SOLID:实线;DOTTED:虚线
画直线:Graphics.drawLine
画矩形/实心矩形:Graphics.drawRect/fillRect
画圆角矩形/圆角实心矩形:Graphics.drawRoundRect/fillRoundRect
画弧线/填充弧线:Graphics.drawArc/fillArc
填充三角形:Graphics.fillTriangle
强制重画:Graphics.repaint
在画布上绘制:字符串和图片
修改字体:Graphics.setFont()
画字符串:Graphics.drawString()
确定定位点: LEFT,HCENTER,RIGHT | BOTTOM,TOP,BASELINE
通过font来得知字符串所占的宽度
例如:将字画在屏幕正中心
画图片:
Graphics.drawImage
Graphics.drawRegion
按键和指针事件
按键事件
相应函数
protected voidkeyPressed(int keyCode) :按下某个键
protected voidkeyReleased(int keyCode) :释放某个键
protected voidkeyRepeated(int keyCode):一直按某个键
键的代码由常量决定
特殊键被认为是游戏键,需要转为游戏键才能进行判断
getGameAction(keyCode)
getKeyCode(action)
映射关系: 上下左右和手机上的上下左右键一致,GAME_A,B,C,D分别对应1,3,7,9键
package prj; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; import javax.microedition.lcdui.game.Sprite; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class MIDlet2 extends MIDlet { private MyCanvas mc = new MyCanvas(); private Display dis; protected void startApp() throws MIDletStateChangeException { dis = Display.getDisplay(this); mc.setTitle("按键画布"); dis.setCurrent(mc); } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub } protected void pauseApp() { // TODO Auto-generated method stub } class MyCanvas extends Canvas{ private Image img; private int x; private int y; private int TRANS = Sprite.TRANS_NONE; public MyCanvas(){ try{ img = Image.createImage("/img.png"); x = 0; y = 0; }catch(Exception ex){} } public void paint(Graphics g){ //画布清空 g.setColor(0,0,255); g.fillRect(0,0,this.getWidth(),this.getHeight()); g.drawRegion(img,0,0,img.getWidth(),img.getHeight(),TRANS,x,y,Graphics.LEFT|Graphics.TOP); } protected void keyRepeated(int keyCode) { int action = this.getGameAction(keyCode); switch(action){ case Canvas.UP: y -= 5; break; case Canvas.DOWN: y += 5; break; case Canvas.LEFT: x -= 5; break; case Canvas.RIGHT: x += 5; break; } repaint();//调用paint函数重画 } protected void keyPressed(int keyCode) { int action = this.getGameAction(keyCode); if (action==Canvas.FIRE){ switch(TRANS){ case Sprite.TRANS_NONE: TRANS = Sprite.TRANS_ROT90; break; case Sprite.TRANS_ROT90: TRANS = Sprite.TRANS_ROT180; break; case Sprite.TRANS_ROT180: TRANS = Sprite.TRANS_ROT270; break; case Sprite.TRANS_ROT270: TRANS = Sprite.TRANS_NONE; break; } } repaint();//调用paint函数重画 } } }
指针事件
利用hasPointerEvents和hasPointerMotionEvents判断是否支持指针
相应函数
protected voidpointerDragged(intx,inty)
protected voidpointerPressed(intx,inty)
protected voidpointerReleased(intx,inty)
案例
动画模拟
界面上有个小红球,要求能够慢慢掉下来然后弹起来
额外要求:增加暂停和继续的功能
package prj; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Graphics; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class MIDlet1 extends MIDlet { private BallCanvas bc = new BallCanvas(); private Display dis; protected void startApp() throws MIDletStateChangeException { dis = Display.getDisplay(this); dis.setCurrent(bc); } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub } protected void pauseApp() { // TODO Auto-generated method stub } class BallCanvas extends Canvas implements Runnable,CommandListener{ private int left = 50; private int top = 50; private int d = 100; private int DIR = 1; //1:向下,2:向上 private Command cmdPause = new Command("暂停",Command.SCREEN,1); private Command cmdResume = new Command("继续",Command.SCREEN,1); private Thread th; private boolean RUN = true; public BallCanvas(){ this.addCommand(cmdPause); this.setCommandListener(this); th = new Thread(this); th.start(); } public void commandAction(Command c,Displayable d){ if(c==cmdPause){//按下暂停按钮 this.removeCommand(cmdPause); this.addCommand(cmdResume); RUN = false; th = null; } else if(c==cmdResume){//按下继续按钮 this.removeCommand(cmdResume); this.addCommand(cmdPause); RUN = true; th = new Thread(this); th.start(); } } public void paint(Graphics g){ g.setColor(0,255,0);//绿色 g.fillRect(0,0,this.getWidth(),this.getHeight()); g.setColor(255,0,0); g.fillArc(left,top,d,d,0,360); } public void run(){ while(RUN){ if(DIR==1){ top+=3; d--; if(top>=this.getHeight()-d){ DIR = 2; } } if(DIR==2){ top-=3; d++; if(top<=50){ DIR = 1; } } repaint();//重画 try{ Thread.currentThread().sleep(10); }catch(Exception ex){} } } } }
界面上每秒钟在随机位置出现随机颜色的数字0-9,要求用户快速反应,按下按键,如果按对,加1分,错误减2分,不按减1分,初始5分,减到0分,提示用户输了。
package prj; import java.util.Random; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Font; import javax.microedition.lcdui.Graphics; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class MIDlet2 extends MIDlet { private NumberCanvas nc = new NumberCanvas(); private Display dis; protected void startApp() throws MIDletStateChangeException { dis = Display.getDisplay(this); dis.setCurrent(nc); } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub } protected void pauseApp() { // TODO Auto-generated method stub } class NumberCanvas extends Canvas implements Runnable{ private char rndChar; private Random rnd = new Random(); public NumberCanvas(){ new Thread(this).start(); } public void paint(Graphics g){ Font font = Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE); g.setFont(font); g.setColor(rnd.nextInt(256),rnd.nextInt(256),rnd.nextInt(256)); int x = rnd.nextInt(this.getWidth()); int y = rnd.nextInt(this.getHeight()); g.drawChar(rndChar, x, y, Graphics.TOP|Graphics.LEFT); System.out.println(rndChar); } public void run(){ while(true){ int number = '0' + rnd.nextInt(10); //0-9之间的数字,转成字符不是0-9 rndChar = (char)number; repaint(); try{ Thread.sleep(100); }catch(Exception ex){} } } public void keyPressed(int keyCode){ //将keyCode和rndChar表示的数字比较,评分 } } }
- J2me源代码.rar (767.3 KB)
- 下载次数: 3
发表评论
-
J2ME代码优化
2011-01-17 10:09 879为什么要优化 CPU不快:10-400MHz 内存有限 ... -
GameAPI
2011-01-17 10:06 1639游戏画布,图层和游戏精灵 简介 javax.microed ... -
网络编程
2011-01-15 08:11 9391、Socket编程 Socket是什么 Socket是套接字 ... -
MSRMS编程
2011-01-13 08:35 954基础知识 持久化存储的 ... -
高级开发
2011-01-07 14:08 826高级开发 异常处理 异常的出现 程序运行时由于一些不可预知的 ... -
高级界面开发
2011-01-06 08:33 984高级界面开发 1:基本界 ... -
体系介绍和环境配置
2010-12-20 14:16 767J2ME简介 Three Java Platforms ...
相关推荐
画布开发Canvas(二).pdf
[For Dummies] HTML5 Canvas 画布开发 傻瓜书 (英文版)
J2ME开发教程,完整的介绍J2ME的开发体系和基本开发
J2ME开发教程,完整的介绍J2ME的开发体系和基本开发
J2ME开发教程,完整的介绍J2ME的开发体系和基本开发
J2ME开发教程,完整的介绍J2ME的开发体系和基本开发
教程名称:J2ME移动开发实战教学系列视频教程课程目录:【】1....画布开发1Canvas绘图(J2ME移动开发实战教学系列视频)【】13.画布开发 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
12. 画布开发1Canvas绘图 13. 画布开发2按键和指针事件 14. 案例2 15. RMS编程1基础知识 16. RMS编程2高级知识 17. 案例3 18. 网络编程1Socket编程 19. 案例4聊天室开发 20. 网络编程2UDP编程 21. 网络编程3HTTP编程...
自制小画布,画笔,HTML5/canvas + JS 效果很炫,支持画笔切换,橡皮擦,画笔粗细等
帆布乒乓球比赛 使用画布开发乒乓球游戏的简单尝试。
12. 画布开发1Canvas绘图 13. 画布开发2按键和指针事件 14. 案例2 15. RMS编程1基础知识 16. RMS编程2高级知识 17. 案例3 18. 网络编程1Socket编程 19. 案例4聊天室开发 20. 网络编程2UDP编程 21. 网络编程3HTTP编程...
12. 画布开发1Canvas绘图 13. 画布开发2按键和指针事件 14. 案例2 15. RMS编程1基础知识 16. RMS编程2高级知识 17. 案例3 18. 网络编程1Socket编程 19. 案例4聊天室开发 20. 网络编程2UDP编程 21. 网络编程3HTTP编程...
12. 画布开发1Canvas绘图 13. 画布开发2按键和指针事件 14. 案例2 15. RMS编程1基础知识 16. RMS编程2高级知识 17. 案例3 18. 网络编程1Socket编程 19. 案例4聊天室开发 20. 网络编程2UDP编程 21. 网络编程3HTTP编程...
13画布开发2:按键和指针事件 14案例2 游戏开发 22GameAPI1:游戏画布,图层和游戏精灵 23GameAPI2:Sprite碰撞检测和动画 24:GameAPI3:TiledLayer和图层管理 网络应用开发 18网络编程1:Socket编程 19案例4:聊天室开发 ...
12. 画布开发1Canvas绘图 13. 画布开发2按键和指针事件 14. 案例2 15. RMS编程1基础知识 16. RMS编程2高级知识 17. 案例3 18. 网络编程1Socket编程 19. 案例4聊天室开发 20. 网络编程2UDP编程 21. 网络编程3HTTP编程...
#介绍 这是一个SDK,可让您构建兼容Betable Canvas的游戏,这意味着可以将它们添加到Betable Games库中并在进行播放 如果您是这方面的新手,那么最好的起点就 #从头开始 下载SDK 创建一个文件夹来存放您的游戏 ...
用NetBeans8.0 模块化开发 实现官网上的简单画布应用程序
微信小程序开发-画布:时钟案例源码.zip