在J2me中实现水波纹效果
2010-09-15 16:39
281 查看
(源自:http://www.javaeye.com/topic/120527)
在J2me中实现水波纹效果
作者:pandonix
日期:2007年9月4日
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
原文地址:http://pandonix.javaeye.com
在J2me中实现水波纹效果
常常在有的网站上面看到一些比较绚丽的水波纹效果。其实,这些都是粒子系统的程序实现。在JSP开发中,已经提供了很多这种特效的实现代码。现在,由于cldc1.1已经支持浮点数运算,所以,我们可以直接在j2me中实现如图所示的特效:
java 代码
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
/**
*
*
Title: 在J2me中实现水波纹效果
*
*
Description:
*
*
Copyright: Copyright (c) 2007
*
*
Company:
*
* @author pandonix
* @version 1.0
*/
public class SplashCanvas extends Canvas implements Runnable{
Image img;
Image imgBuff;
Graphics ibg;
int w,h;
int num=0;
double angle;
int wave;
public SplashCanvas() {
this.setFullScreenMode(true);
try{
init();
}
catch(Exception e){
}
}
public void init() throws Exception
{
img=Image.createImage("/1.png");
w=img.getWidth();
h=img.getHeight();
imgBuff=Image.createImage(2*w,h);
ibg=imgBuff.getGraphics();
ibg.drawImage(img,0,0,0);
}
public void paint(Graphics g) {
g.setColor(255,255,255);
g.fillRect(0,0,g.getClipWidth(),g.getClipHeight());
angle=num*Math.PI/6;
double parm = 14.0;
for(int i=0;i
{
wave=(int)((i/parm+1)*Math.sin(h/parm*(h-i)/(i+1)+angle));
ibg.drawRegion(img, 0, i, w, 1, 0, 0, i + wave, 0);
}
num=++num%12;
g.drawImage(img,10,0,0);
g.drawRegion(imgBuff,0,0,2*w,h,Sprite.TRANS_MIRROR_ROT180,10,h,0);
}
public void run(){
while(true){
try{
Thread.sleep(80);
repaint();
}
catch(Exception e){
}
}
}
}
思考:
该算法最关键部分采用了浮点数运算,由于只有cldc1.1才支持,所以对水波纹特效的通用性产生了质疑。其实,在cldc1.0也不是不能实现。首先,可以采用将int放大的方式来代替小数,例如,采用1400来表示1.4,最后对结果进行/1000处理。这也是j2me中对于小数的通常处理。其次,可以按照放大int的思路来模拟sin,即,将sin的值放大1000倍以后,采用数组存放起来。
当然,还可以采用开源的浮点数库,例如,在j2mepolish中就提供了HFloat这样的类,遗憾的是,该类的实现效率很低。
描述:
大小: 21.4 KB
查看次数: 19
src.rar (1.8 KB)
描述:
下载次数: 73
在J2me中实现水波纹效果
作者:pandonix
日期:2007年9月4日
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
原文地址:http://pandonix.javaeye.com
在J2me中实现水波纹效果
常常在有的网站上面看到一些比较绚丽的水波纹效果。其实,这些都是粒子系统的程序实现。在JSP开发中,已经提供了很多这种特效的实现代码。现在,由于cldc1.1已经支持浮点数运算,所以,我们可以直接在j2me中实现如图所示的特效:
java 代码
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
/**
*
*
Title: 在J2me中实现水波纹效果
*
*
Description:
*
*
Copyright: Copyright (c) 2007
*
*
Company:
*
* @author pandonix
* @version 1.0
*/
public class SplashCanvas extends Canvas implements Runnable{
Image img;
Image imgBuff;
Graphics ibg;
int w,h;
int num=0;
double angle;
int wave;
public SplashCanvas() {
this.setFullScreenMode(true);
try{
init();
}
catch(Exception e){
}
}
public void init() throws Exception
{
img=Image.createImage("/1.png");
w=img.getWidth();
h=img.getHeight();
imgBuff=Image.createImage(2*w,h);
ibg=imgBuff.getGraphics();
ibg.drawImage(img,0,0,0);
}
public void paint(Graphics g) {
g.setColor(255,255,255);
g.fillRect(0,0,g.getClipWidth(),g.getClipHeight());
angle=num*Math.PI/6;
double parm = 14.0;
for(int i=0;i
{
wave=(int)((i/parm+1)*Math.sin(h/parm*(h-i)/(i+1)+angle));
ibg.drawRegion(img, 0, i, w, 1, 0, 0, i + wave, 0);
}
num=++num%12;
g.drawImage(img,10,0,0);
g.drawRegion(imgBuff,0,0,2*w,h,Sprite.TRANS_MIRROR_ROT180,10,h,0);
}
public void run(){
while(true){
try{
Thread.sleep(80);
repaint();
}
catch(Exception e){
}
}
}
}
思考:
该算法最关键部分采用了浮点数运算,由于只有cldc1.1才支持,所以对水波纹特效的通用性产生了质疑。其实,在cldc1.0也不是不能实现。首先,可以采用将int放大的方式来代替小数,例如,采用1400来表示1.4,最后对结果进行/1000处理。这也是j2me中对于小数的通常处理。其次,可以按照放大int的思路来模拟sin,即,将sin的值放大1000倍以后,采用数组存放起来。
当然,还可以采用开源的浮点数库,例如,在j2mepolish中就提供了HFloat这样的类,遗憾的是,该类的实现效率很低。
描述:
大小: 21.4 KB
查看次数: 19
src.rar (1.8 KB)
描述:
下载次数: 73
相关文章推荐
- 【移动开发】Android波纹动画效果实现 推荐
- 自定义view实现水波纹效果
- 以动画实现 水波纹扩散效果.
- Android实现水波纹外扩效果
- JS实现图片产生波纹一样flash效果的方法
- 自定义按钮实现水波纹效果
- 自定义View实现水波纹下载进度效果
- J2me中实现淡入淡出效果
- iOS开发之iOS中的动画实现,通过CAShapeLayer、CAShapeLayer,CAReplicatorLayer实现炫酷的动画、雷达效果,波纹效果,咻一咻效果。iOS核心动画实现。
- 用material Design主题实现 水波纹效果
- Android实现水波纹外扩效果
- 在5.0以上手机上用系统原生方式实现波纹涟漪效果
- css3+jQuery实现按钮水波纹效果
- Android 设置主题实现点击波纹效果的示例
- Android自定义View——贝塞尔曲线实现水波纹效果
- Android实现水波纹扩散效果的实例代码
- C语言实现水波纹效果
- Android 颜色渲染(七) RadialGradient 环形渲染实现水波纹效果
- J2ME实现百叶窗效果
- 分享一个水波纹动画效果的实现