一个新手发的看看有借鉴意义没百叶窗效果

百叶窗效果


如图所示

有2个画面,其中一个以百叶窗形式消失,从而显示另一个画面。

这是很多游戏公司用到形式。

现写出2种画法 只写出竖的百叶,横的画法雷同。斜的我还没想到,呵呵

循环的控制可有线程Thread#sleep()方法或Timer#(TimerTask,long delay,long period)实现。我将分别演示给大家。

1。矩形画法

思路:在背景画面上画N个矩形,可以以不同的颜色绘制。矩形逐渐变小至无,从 而显示出背景画面。此法百叶窗可随机颜色显示,

import javax.microedition.lcdui.*;

class Abc extends Canvas implements Runnable {
/** 储存Image对象的变量 */

private Image imgb;
private boolean isStopped;
private int i;
/** 构造函数 */
Abc() {
//取得图像
try {
imgb = Image.createImage("/b.png");//获取背景图片

}catch(java.io.IOException e) {}


//开始描绘线程
doStart();
}

/** 启动动画线程的方法 */
private void doStart() {
isStopped = false;
Thread th = new Thread(this);
th.start();
}

/** 停止动画线程的方法 */
private void doStop() {
isStopped = true;
}

/** 动画线程处理部分 */
public void run() {
i=128/8;
while(! isStopped) {
try {
repaint(); //再描绘
Thread.sleep(100); //等待一定时间
i--; //矩形宽逐渐变小

if(i <0) { //矩形宽为0终止

doStop(); //也可写为i=0

}

}catch(InterruptedException e){}
}
}


/** 进行描绘的方法 */
protected void paint(Graphics g) {
//将背景涂白
g.setColor(0x00FFFFFF);
g.fillRect(0, 0, getWidth(), getHeight());
//画蓝
g.drawImage(imgb,0,0,20);//画背景图
for(int j=0;j<getWidth();j+=getWidth()/8){
g.fillRect(j,0,i,getWidth());//画矩形遮盖于背景
}

}
}

 

2。setClip画法

思路:画背景图。然后设置setClip范围为全屏,画显示图,然后缩小Clip范围至无,显示图将无法显示。出现北京图。试想一下,如果程序较大载入慢,将主程序设为背景,LOGO图片设为显示。使用Timer先显示LOGO,一段时间显示主届面。效果很好。

import javax.microedition.lcdui.*;
import java.util.Timer;
import java.util.TimerTask;

public class Abc extends Canvas {
/** 储存Image对象的变量 */

private Image imgb,logo;
private Timer b;
private int j=getWidth()/8;
private St t;
/** 构造函数 */
Abc() {
//取得图像

try {
imgb = Image.createImage("/b.png");//获取背景图片
logo = Image.createImage("/a.png");//logo图片
}catch(java.io.IOException e) {}

b= new Timer();
St t=new St();
b.schedule(t,1000,100); //LOGO图片显示1秒后以百叶窗形式消失,显示背景主界面
}

/** 进行描绘的方法 */
protected void paint(Graphics g) {
//将背景涂白
g.setColor(0x00FFFFFF);
g.fillRect(0, 0, getWidth(), getHeight());
//画蓝
g.drawImage(imgb,0,0,20);//画背景图
for(int i=0;i<getWidth();i+=getWidth()/8)
{
g.setClip(i,0,j,getHeight());//设置透视口
g.drawImage(logo,0,0,20);
}

}


class St extends TimerTask
{

public void run()
{

if (j>0)
{
j--;
repaint();
} else
{

b.cancel();
}

}
}
}

 

一个高手的评价:

第一种不可取

我到是觉得用MIDP 2.0的drawRGB()比较好 在底图上覆盖一个遮罩 然后模拟百叶窗的渐变效果 直到最后透明


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值