深入理解Canvas类的使用(一)

深入理解Canvas类的使用(一)

作者:陈跃峰

Email:cqucyf@gmail.com

 

       在J2ME游戏编程中,Canvas类是最常用的类之一,该类提供了获得手机屏幕属性、绘制界面以及事件处理等很多实用的功能,下面就系统的介绍一下该类的使用,并结合实际说明一下在实际的使用过程中需要注意的一些问题。

       Canvas类是Displayable的子类,主要用来需要处理低级事件,例如键盘按键事件等,以及需要绘制屏幕的程序。在实际的使用过程,一般都通过继承Canvas来利用该类提供的功能。Canvas类是一个抽象类,继承该类的时候必须覆盖paint方法。

       Canvas类的功能主要包含以下几类:

1、  获得手机屏幕属性

l         getHeight——获得屏幕可用高度

l         getWidth——获得屏幕宽度

l         isDoubleBuffered——是否支持双缓冲

l         hasPointerEvents——是否支持指针设备

l         hasPointerMotionEvents——是否支持指针动作,例如拖拉事件

l         hasRepeatEvents——是否支持重复按键

实际开发过程中,可以在程序中直接调用这些方法,通过返回值获得相应的属性信息。

2、  绘制方法

l         paint——绘制方法

l         repaint——重新绘制方法

paint方法需要在界面类中覆盖,然后就可以书写功能,而再需要重新绘制的时候手动调用repaint方法。

3、  事件处理

低级用户界面的事件处理分为两种:按键事件和指针事件(处理触摸屏手机的低级事件)。

支持按键事件的方法主要有三个:

l         keyPressed——按键按下的事件

l         keyReleased——按键释放的事件

l         keyRepeated——重复按键的事件

支持指针事件的方法也有三个:

l         pointerPressed——指针设备按下事件

l         pointerReleased——指针设备释放事件

l         pointerDragged——指针设备拖拉事件

在实际的编程中,只需要在界面类中覆盖这些方法,然后在方法的内部书写代码即可,在发生这些事件的时候,系统会自动调用这些方法。

4、  其他方法

l         getGameAction——将按键映射成游戏动作

l         getKeyCode——将游戏动作转换为键值

l         getKeyName——将键值转换为按键名称

l         hideNotify——在Canvas界面被隐藏的时候系统自动调用该方法

l         showNotify——当Canvas界面显示的时候系统自动调用该方法

l         serviceRepaints——强制系统重新绘制

以上方法除了hideNotify、showNotify需要在子类中覆盖,系统会自动调用以外,其他的方法都可以直接调用。

5、  系统的熟悉主要分为两个部分:

l         按键的键值

KEY_NUM0、KEY_NUM1、KEY_NUM2、KEY_NUM3、KEY_NUM4、KEY_NUM5、KEY_NUM6、KEY_NUM7、KEY_NUM8、KEY_NUM9分别对应手机键盘的0-9数字键,KEY_STAR对应*号键,KEY_POUND对应#号键。各个功能键的键值在Canvas类没有进行定义,所以各个厂商,甚至厂商的不同型号手机之间,的键值都有所不同。但是功能键的键值均小于0。

l         游戏动作

UP、DOWN、LEFT、RIGHT和FIRE,分别对应上、下、左、右和确定键,在实际的手机中一般分别对应2、8、4、6和5键以及功能键中的方向键。GAME_A、GAME_B、GAME_C、GAME_D分别对应游戏中的A、B、C和D键,分别映射成手机上的1、3、7、9键,或者是7、9、*和#键。

在实际的事件处理中,使用游戏可以达到在不同的手机之间通用。

              在MIDP2.0中,又新增了两个方法,分别是:

l         setFullScreenMode——控制屏幕是全屏幕显示还是一般模式显示

l         sizeChanged——当屏幕尺寸变化的时候,系统会自动调用该方法。

上面系统的介绍了Canvas类提供的功能,下面就介绍一下它的使用。当调用Display对象的setCurrent方法显示Canvas界面时,系统首先调用Canvas对象的构造方法,然后调用paint方法实现绘制,这样我们就可以看到实际的界面了。而以后,当界面坐标发生变化以后,必须手动调用repaint方法实现绘制。

以下是一些在实际的编程过程中,需要注意的一些问题:

l         坐标参数化或者根据屏幕的宽度和高度生成坐标,从而提高界面的移植性。

l         在程序运行过程中,paint方法经常被反复调用,所以一般在该方法中只放置绘制的代码,而把逻辑处理的代码放在别的位置。

l         在进行低级事件处理代码编写中,对于游戏按键,尽量使用游戏动作进行编程,其他按键才直接使用键值,从而提高事件处理代码的移植性。

l         因为hideNotify和showNotify方法会在界面隐藏和重新显示时,被系统自动调用,所以可以覆盖这两个方法,在其中实现暂停的逻辑。

l         尽量使用双缓冲技术,避免屏幕的闪烁,除非手机不支持双缓冲。

l         显示其他界面的时候,注意要关闭线程,并释放资源。

 

深入剖析 C# WPF Canvas 控件:布局与绘图的极致利器 14 Canvas控件是 C# WPF 中一个功能强大且灵活的工具,它为开发者提供了精确的布局和绘图控制能力。通过掌握其基础用法、高级绘图应用以及性能优化策略,你可以利用Canvas构建出富有创意和高性能的用户界面。无论是简单的元素定位还是复杂的动画效果,Canvas都能满足你的需求,成为你 WPF 开发中的得力助手。 阅读详情

相关推荐

深入理解Android canvas.save()与canvas.restore()

本文还有配套的精品资源,点击获取 简介:在Android开发中, Canvas 类负责绘图操作,而 save() 和 restore() 方法用于管理绘图状态,保证绘图的可逆性和精确性。本文深入探讨了这两个方法的工作原理及其在复杂绘图中的应用,包括如何通过保存和恢复状态来处理变换,以及这些操作在实际绘图中的效率和准确性。 ...

weixin_33193177的博客 883

C# wpf 实现Canvas内控件拖动

前言 有一些业务场景中我们需要拖动控件,上一篇文章《C# wpf 实现Grid内控件拖动》在Grid中实现的控件拖动,在Canvas中也可以实现控件拖动,通过设置Canvas的附加属性即可,根据鼠标的移动,设置相应Canvas的Left、Top。 一、如何实现? 1.注册鼠标事件 拖动的控件需要注册3个鼠标事件分别是,鼠标按下、鼠标移动、鼠标弹起。 以Button为例: <Button PreviewMouseDown="Button_MouseDown" PreviewM

codeofcc的博客 7112

深入理解Canvas动态效果的实现原理

简介:JavaScript中的Canvas元素是创建动态图形和视觉效果的关键。本项目旨在通过基础教程或示例展示如何使用HTML5 Canvas API创造动画。学习内容涵盖Canvas的基本概念、元素创建、二维渲染上下文、绘图方法、颜色和样式、动画原理、事件监听、图像处理、保存导出及性能优化等关键知识点。开发者将通过实践掌握Canvas绘图技术,并能创建和优化自己的动态效果。

weixin_35752645的博客 875

canvas绘制对象

一、初识canvas <canvas>标签定义图形,比如图表和其他图像,标签只是图形容器,必须使用脚本来绘制图形 语法格式: <canvas id='myCanvas' width="200px" height="200px"> 获得canvas对象(获取画布元素): var c = document.getElemenetById("myCanvas") 获得CanvasRenderingContext2D 对象,该对象提供基本的绘图命令: var ctx = c.getC

Jeasu_0908的博客 1335

基于C#开发的图像绘制、Canvas绘图及图片处理应用开发

功能包含:绘制线段、矩形、椭圆形、控制粗细、调整颜色、旋转图形、平移图形、缩放图形,满足填充颜色、插入图片、另存为、暗角、降低亮度、灰度、浮雕、马赛克、锯齿等操作。资源包含:演示视频,项目源代码

CMOS sensor 基础

NA

m0_72053187的博客 1663

深入理解easy-canvas文档流:Flex布局在Canvas中的创新实现

easy-canvas是一个强大的工具,它帮助我们在Canvas中轻松实现文档流布局,特别适用于小程序海报图和朋友圈分享图的创建。本文将深入探讨easy-canvas如何创新性地在Canvas中实现Flex布局,以及如何利用这一特性来构建复杂的界面。 ## 为什么在Canvas中需要文档流布局? Canvas作为HTML5的重要特性,提供了强大的图形绘制能力,但原生Canvas API缺乏布局

gitblog_01158的博客 460

yanshee 机器人全流程指南

2.点击yanshee app右上角根据提示操作 3.当手机显示成功连接 ,按下机器人胸前按钮说出“ip地址”4.根据机器人播报的ip地址加上:8888使用浏览器访问,你就会看到 jupyterd的界面,里面可以新建文件也可以改他存在的文件。我们使了yanshee机器人,这个是面向K12、中高职、高校学生推出的开源人形机器人教育平台,应用于课程教学、竞赛、科研活动等场景。我们接下来可以根据这些apl做许多好玩的,比如控制他运动,跳舞唱歌,it`s easy。注意电脑,手机,机器人必须连同一个网。

qq_44827929的博客 7616

5分钟学会canvas的使用

在HTML5新增新的标签,名为画布,可以使用JS在上面完成对应的画的操作。正常情况我们可以把它当成一个img看待。

object not found的博客 1万+

scGPT-spatial 复现

文章摘要:Spatial scGPT项目复现流程 本文详细介绍了复现Spatial scGPT项目的完整流程,包含数据预处理、模型训练等关键步骤。首先需要使用scanpy加载H5AD文件并进行归一化、对数变换等预处理。然后构建基因词汇表(vocab),提取基因表达值和空间坐标信息。接着使用DataCollator进行数据分箱、掩码和填充处理。最后搭建TransformerModel进行训练。文章特别指出了需要自行补全的缺失部分,包括基因词汇表构建、空间坐标提取、数据集类定义和训练主循环脚本等。作者还提供了详

victory0431的博客 1684

从IMU到机器人定位:手把手教你用ESKF(Error-State Kalman Filter)搞定传感器融合

本文详细介绍了如何使用ESKF(Error-State Kalman Filter)实现IMU与多传感器的融合,解决机器人定位中的积分漂移问题。通过代码示例和Gazebo仿真案例,展示了ESKF在自动驾驶和移动机器人中的核心应用,包括误差状态建模、预测过程实现和观测更新策略,帮助开发者掌握这一高效滤波技术。

weixin_33275503的博客 286

深入理解Canvas中的textAlign和textBaseline属性

在使用HTML5 Canvas绘制文本时,精确控制文本的位置是非常重要的。HTML5 Canvas提供了两个关键属性——textAlign和,它们分别用于控制文本的水平对齐方式和垂直对齐方式。本文将详细介绍这两个属性的作用、用法以及一些实际应用示例。

1762

Win11 24H2家庭版共享打印机失败?别慌,一个批处理脚本搞定所有设置

本文提供了Win11 24H2家庭版共享打印机失败的解决方案,通过一个批处理脚本自动修复所有设置问题。脚本包含安装组策略组件、修改关键注册表项等操作,帮助用户快速恢复打印机共享功能,适用于普通家庭用户。

weixin_30632089的博客 424

Canvas2Svg技术实现解析:从Canvas API到SVG DOM的优雅转换

在Web图形开发领域,Canvas和SVG是两种截然不同的技术路线。Canvas提供像素级操作,适合动态渲染和游戏开发;SVG则是矢量图形标准,具备无限缩放和DOM操作的优势。然而,当我们需要将动态生成的Canvas内容转换为可编辑、可缩放的矢量图形时,Canvas2Svg库提供了一个巧妙的解决方案。本文将从技术实现角度深入解析Canvas2Svg的底层机制,探讨其在实际工程中的应用场景和性能优化

gitblog_00825的博客 1329

光学防抖OIS介绍与标定

前言:先看一下有无ois系统的效果。 1. OIS系统的作用就是消除镜头的抖动。 Gyro感受方向,Hall感受位移,Actuator驱动马达来矫正抖动方向和位移。 2.ois系统的结构构成 从上面来看ois系统主要有Hall,...

camerall 1万+

在 SAP 里玩转 FTP:标准程序 RSFTP00x 全景解析与落地实践

摘要:SAP系统通过封装的标准FTP程序(RSFTP001-008)提供便捷的文件传输能力,适用于各类集成场景。关键点包括:1)依赖SAPFTP可执行程序和RFC目的地;2)使用RSFTP005进行前置检查并生成RFC配置;3)标准报表各司其职,如RSFTP002用于命令测试、RSFTP007/008提供参考实现;4)开发时组合FTP_CONNECT/COMMAND/DISCONNECT等函数模块。特别注意前台(SAPFTP)与后台(SAPFTPA)的环境差异,这是常见故障点。该方案通过标准化工具链显著降低

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 210

Canvas学习与使用

Canvas学习与使用 <canvas> 是 HTML5 新增的,一个可以使用脚本(通常为 JavaScript) 在其中绘制图像的 HTML 元素。它可以用来制作照片集或者制作简单(也不是那么简单)的动画,甚至可以进行实时视频处理和渲染。 <canvas> 只有两个可选的属性 width、heigth 属性,默认 width为300、height 为 150,单位都是 px 一、绘制形状的原理 栅格的起点为左上角,坐标为 (0,0) 。所有元素的位置都相对于原点来定位;图中蓝色方形

ZikM的博客 867

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

canvas-editor源码解析:深入理解Canvas富文本编辑器的设计哲学

canvas-editor是一款基于Canvas/SVG技术构建的富文本编辑器,它通过创新的设计理念重新定义了在线文档编辑的体验。这个开源项目采用模块化架构,为开发者提供了高度可定制和可扩展的编辑解决方案。 ## 🎯 核心架构设计 canvas-editor采用了分层架构设计,将编辑器功能划分为多个独立的模块,每个模块负责特定的功能领域: - **Draw模块**:负责核心渲染逻辑,将文档

gitblog_00179的博客 1040

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

canvas2svg扩展开发指南:如何自定义Canvas绘图API到SVG的转换

canvas2svg是一个强大的JavaScript库,它能够将HTML5 Canvas绘图命令实时转换为SVG矢量图形。这个开源项目为开发者提供了一个简单而有效的方法,将动态生成的Canvas图形保存为可缩放的SVG格式。无论你是需要将交互式图表导出为矢量文件,还是希望将Canvas动画转换为可编辑的SVG,canvas2svg都能提供完整的解决方案。 ## 📋 canvas2svg核心功能

gitblog_00788的博客 836

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Canvas2SVG:如何将Canvas绘图无损转换为SVG矢量图形

你是否曾经遇到过这样的困境?精心绘制的Canvas图表在导出时变成了模糊的位图,或者需要将动态生成的图形转换为可编辑的矢量格式?Canvas2SVG正是为解决这些问题而生的JavaScript库,它通过模拟Canvas 2D上下文API,让你能够无缝地将Canvas绘图命令转换为高质量的SVG文档。 ## 问题驱动:为什么需要Canvas转SVG? 在Web开发中,Canvas和SVG是两种主

gitblog_00294的博客 885

深入理解Danmaku双引擎架构:DOM vs Canvas渲染性能对比

Danmaku作为一款高性能JavaScript弹幕引擎库,创新性地采用了DOM与Canvas双引擎架构,为开发者提供了灵活且高效的弹幕渲染解决方案。本文将深入剖析这两种渲染引擎的底层实现原理,通过对比分析帮助你理解如何在不同场景下选择最优的弹幕渲染方案。 ## 🚀 双引擎架构设计理念 Danmaku的双引擎设计源自对弹幕场景多样性的深刻理解。项目在[src/engine/](https:/

gitblog_01035的博客 343

java canvas graphics_android.graphics Canvas基本使用 转

Canvas的意思是画布,表现在屏幕上就是一块区域,我们可以再上面使用各种API绘制我们想要的东西。可以说,Canvas贯穿整个2D Graphics,android.graphics中的所有类,几乎都于Canvas有直接或间接的联系。所以了解Canvas是学习2D Graphics的基础。Android官方文档对Canvas的简介很好的介绍了Canvas的使用:TheCanvasclass...

weixin_35930255的博客 416

Force-graph 源码解析:深入理解 Canvas 渲染和力模拟原理

**Force-graph** 是一个基于 HTML5 Canvas 的强大 2D 力导向图可视化库,它结合了物理模拟引擎和高效的 Canvas 渲染技术,能够优雅地展示复杂的关系网络数据。对于前端开发者来说,理解这个库的源码架构和实现原理,不仅能帮助我们更好地使用它,还能学到许多关于数据可视化、性能优化和物理模拟的宝贵经验。 ## 项目架构概览 📊 Force-graph 的核心架构分为三

gitblog_00092的博客 748
上一篇: 深入理解CLDC和MIDP
下一篇: J2ME平台手机游戏移植体会(二)
java2000_test
博客等级 码龄19年 10粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值