最近在做一个小Demo时,需要画一个半透明的圆,看遍MIDP的API及Nokia UI包的文档,发现没有一个函数能做出此功能,没办法了,只好自已写了.
画圆的思路很简单,就是生成一个半径两倍的正方开的RGB数组,有来装圆上每个点的象素的颜色,如果这个点与圆心的距离 <= 半径,则这个点在圆里面,颜色为半透明的,如果与圆心的距离 > 半径,则这个点在圆外面,全透明,代码如下:
private int[] getCircleAry(int radius, int alpha) {
int[] aryTmp = new int[4*radius*radius];
for (int i = 0; i < 4*radius*radius; i++) {
int x = (int)(i / (2*radius));
int y = i % (2*radius);
int iSum = (radius - x)*(radius - x) + (radius - y)*(radius - y);
if (iSum > radius*radius)
aryTmp
= 0x00FF0000; //全透明
else
aryTmp
= (alpha << 24) | 0x00FF0000;//半透明
}
return aryTmp;
}
下面是做出来的效果:
椭圆的思路与圆的很相似,假设椭圆的X轴的半径是6,Y轴的半径是4,帽椭圆的公式v如下:
x2/36 + y2/16 = 1
用数学知识处理一下,分子都乘36*16,则公式变成如下:
16*x2 + 36*y2 = 36*16
再用这个公式来判断点是不是在椭圆里面,是则半透明,否则全透明,代码如下:
private int[] getEllipseAry(int radiusX, int radiusY, int alpha) {
int[] aryTmp = new int[4 * radiusX * radiusY];
int iPosX, iPosY, iSum1, iSum2;
iSum1 = radiusX * radiusX * radiusY * radiusY;
for (int i = 0; i < 4 * radiusX * radiusY; i++) {
iPosX = i % (2 * radiusX);
iPosY = (int)(i / (2 * radiusX));
iSum2 = (radiusX - iPosX) * (radiusX - iPosX) * radiusY * radiusY +
(radiusY - iPosY) * (radiusY - iPosY) * radiusX * radiusX;
if (iSum2 > iSum1)
aryTmp
= 0x00FF0000; //全透明
else
aryTmp
= (alpha << 24) | (0x0000FF & 0x00FFFFFF); //半透明
}
return aryTmp;
}
下面是做出来的效果:
转贴来自于:
http://www.j2medev.com/Article/Class1/Class12/200607/2810.html
分享到:
相关推荐
通过研究这个源代码包,开发者可以学习到如何有效地利用MIDP 2.0 API创建移动应用,理解Sun公司(现在是Oracle公司)的设计理念,包括如何优化性能、处理有限的内存和屏幕大小,以及如何在资源受限的环境中实现高...
在MIDP 2.0中,开发者可以利用二维坐标系统和数学方法来实现像素级别的精确碰撞检测,提升游戏体验。 7. **多媒体支持**:MIDP 2.0增强了对音频和视频的支持,使得开发多媒体应用变得更加便捷。 源代码下载通常...
"midp2.0fcs"可能是Midp 2.0的最终候选版本(Final Candidate Stage)的压缩包文件,包含了完整的源代码。下载并解压后,开发者可以通过阅读文档、编译源码以及运行模拟器来学习和探索MIDP 2.0的实现。 总的来说,...
在MIDP 2.0中,开发者可以利用更丰富的UI组件来创建动态的用户界面。例如,`Form` 类允许将多个组件组合在一起,而 `Command` 和 `CommandListener` 接口则用于处理用户的命令操作。 ##### 2. 多媒体集成 MIDP 2.0...
在MIDP 2.0中,MIDlet(MIDP的应用程序单元)可以通过`java.lang.System.getProperty()`方法来获取系统属性,这些属性包括: 1. `microedition.profiles`:返回系统支持的所有Profile信息。 2. `microedition....
### MIDP2.0教程概览与核心知识点 ...通过深入理解MIDP2.0的核心概念、掌握J2ME游戏开发的基础知识、熟悉MIDP2.0的新增功能,以及应对游戏开发中的常见挑战,开发者将能够创作出既具创意又富有娱乐性的手机游戏。
《深入MIDP2.0(2) - CLDC与MIDP工具类别》这篇电子文档聚焦于移动设备上的应用程序开发,特别是针对Java ME(Java Micro Edition)平台的MIDP2.0(Mobile Information Device Profile)和CLDC(Connected Limited ...
为了开发MIDP2.0应用,开发者可以使用Eclipse、NetBeans等集成开发环境(IDE),它们提供了MIDP的插件支持,包括代码编辑、调试和模拟器功能。 **10. 实战演练** "1"、"2"、"3"这可能是讲座的三个部分,分别对应...
Midp2.0 API 是Java ME(Micro Edition)平台的一部分,专为移动设备和嵌入式系统的应用程序开发设计。NokiaUI 是诺基亚公司针对Midp2.0 API 提供的一个扩展,它提供了丰富的用户界面组件和功能,使得开发者能够创建...
通过使用MIDP 2.0 TheGame API,开发者可以充分利用移动设备的硬件资源,创造出具有高质量图形和沉浸式游戏体验的移动游戏。`midp2_gameapi.pdf` 文件很可能是详细的API文档,包含了这些类和接口的用法说明,而`...
在Android平台上,开发游戏时有时会遇到需要复用或移植早期J2ME(Java 2 Micro Edition)MIDP 2.0中的Game API的情况。MIDP 2.0是J2ME针对移动设备提供的一套游戏开发框架,其中Game API提供了丰富的图形和动画处理...
本篇将详细介绍如何利用MIDP 2.0中的javax.microedition.lcdui.game包来快速入门手机游戏开发。 ### javax.microedition.lcdui.game包介绍 javax.microedition.lcdui.game包是Java ME为游戏开发提供的一系列类和...
NEC-MobileFriend带给我们的MIDP2.0讲座秉承JAVA初级讲座的对话形式,配合丰富生动的插图,以NEC N840手机为例介绍了MIDP2.0的新特性,包括GameAPI中各个类的使用,3D动画的开发以及NEC的UI API等等。 讲座目录: ...
MIDP2.0 API,J2me必用,MIDP2.0 API,MIDP2.0 APIMIDP2.0 API
在 MIDP 2.0 中,Game API 支持更精细的按键状态检测,不再仅仅是简单的按下或释放事件,而是通过 `getKeyStates()` 方法获取按键的状态。例如,可以通过以下代码片段检测左右上下键是否被按下: ```java protected ...
这个文件可能包含了完整的MIDP2.0 API文档、SDK以及示例代码,帮助开发者理解和使用MIDP2.0进行应用程序开发。 总的来说,MIDP2.0是Java ME为移动设备开发提供的一个强大平台,它通过丰富的API和功能,使得开发者...
【标题】"MIDP2.0飞行射击游戏源代码" 涉及到的是一个基于Java Mobile Information Device Profile(MIDP)2.0版本开发的飞行射击类游戏的编程实践。MIDP是Java Micro Edition (Java ME)的一部分,主要用于在功能...
《J2ME游戏开发与MIDP2.0》是一本深入探讨Java 2 Micro Edition (J2ME) 平台上游戏开发的专业书籍,尤其针对Mobile...通过阅读这本书,你不仅可以学习到J2ME和MIDP2.0的基础知识,还能掌握开发出色移动游戏的实战技巧。
压缩包内的“MIDP 2.0 游戏开发API”很可能是MIDP 2.0的文档或者示例代码集合,它包含了游戏开发所需的关键接口和类的详细说明,如`javax.microedition.lcdui`包下的图形和用户界面类,以及`javax.microedition....