实现游戏中的文字滚屏功能
来源:互联网 发布:宿州安广网络客服电话 编辑:程序博客网 时间:2024/05/01 02:18
在J2ME的高级的图形用户界面API中并没有提供类似滚屏的效果,因此我们需要自己通过Canvas类来实现,我们应该在Canvas类的paint()的方法中绘制我们要滚动的文字,基本代码如下所示:
protected void paint(Graphics arg0)
{
int oldColor = arg0.getColor();
arg0.setColor(255, 255, 255);
arg0.fillRect(0, 0, width, height);
arg0.setColor(oldColor);
arg0.drawString(welcome, left, i, Graphics.LEFT | Graphics.TOP);
}
当我们初始化一个Canvas的子类的时候,paint()方法将被调用,我们需要它定时得往上滚动,因此我们可以借助Timer和TimerTask类,我们在TimerTask类中通过实现public void run()方法来对文字的y坐标减小一定的数值。当文字到达屏幕的中间的时候停止减少并停止timer。在这里我是实现了一个内部类,当然你也可以实现成匿名内部类。
private class ScrollTask extends TimerTask
{
public void run()
{
if (i > height / 2)
{
i = i - fontHeight;
repaint();
} else
{
going = false;
timer.cancel();
}
}
}
我们的WelcomeCanvas类扩展Canvas并实现它的paint()方法,在WelcomeCanvas的构造器中我们把display和下一个Displayable的对象传给他,并在其中完成一些具体尺寸的计算。
public WelcomeCanvas(Display display,Displayable disp) {
super();
Font font = Font.getDefaultFont();
left = (width - font.stringWidth(welcome))/2;
fontHeight = font.getHeight();
this.display = display;
this.next = disp;
ScrollTask st = new ScrollTask();
timer.schedule(st, 100, 100);
}
当文字滚动到中间后,用户可以通过按下任意键继续操作。因此我们需要keyPressed()方法,如果是触摸屏的话你可以用pointerPressed()方法实现。
public void keyPressed(int keyCode)
{
if(!going)
display.setCurrent(next);
}
下图是程序运行的结果,并给出源代码。其实很多类似的效果都可以通过这样的方法来实现。
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class GuessNumber extends MIDlet
{
private Display display;
private WelcomeCanvas welcomeCanvas;
private Form mainForm;
protected void startApp() throws MIDletStateChangeException
{
initMIDlet();
}
private void initMIDlet()
{
display = Display.getDisplay(this);
mainForm = new Form("Guess Number");
mainForm.append("this is a game");
welcomeCanvas = new WelcomeCanvas(display,mainForm);
display.setCurrent(welcomeCanvas);
}
protected void pauseApp()
{
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException
{
}
}
/*
* Created on 2004-9-24
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author E2412C
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class WelcomeCanvas extends Canvas
{
public static final String welcome = "Press any key to start";
private Display display;
private Displayable next;
private Timer timer = new Timer();
private int width = getWidth();
private int height = getHeight();
private int i = height;
private int left;
private int fontHeight;
private boolean going = true;
public WelcomeCanvas(Display display,Displayable disp) {
super();
Font font = Font.getDefaultFont();
left = (width - font.stringWidth(welcome))/2;
fontHeight = font.getHeight();
this.display = display;
this.next = disp;
ScrollTask st = new ScrollTask();
timer.schedule(st, 100, 100);
}
protected void paint(Graphics arg0)
{
int oldColor = arg0.getColor();
arg0.setColor(255, 255, 255);
arg0.fillRect(0, 0, width, height);
arg0.setColor(oldColor);
arg0.drawString(welcome, left, i, Graphics.LEFT | Graphics.TOP);
}
public void keyPressed(int keyCode)
{
if(!going)
display.setCurrent(next);
}
private class ScrollTask extends TimerTask
{
public void run()
{
if (i > height / 2)
{
i = i - fontHeight;
repaint();
} else
{
going = false;
timer.cancel();
}
}
}
}
- 实现游戏中的文字滚屏功能
- 实现游戏中的文字滚屏功能
- 实现游戏中的图片滚屏功能
- javascript来实现无缝文字的滚屏
- 文字滚屏控件(SliderPanel)
- 【Qt】滚动条QScroolBar实现滚屏功能
- 实现游戏中的简单打字功能
- 实现游戏中的简单打字功能
- 实现游戏开发中的屏幕滚动功能
- Java仿游戏滚屏
- JQUERY实现判断鼠标往上滚往下滚的功能。
- javascript 实现滚屏
- JS滚屏实现
- jq文字垂直滚动/滚屏效果
- 第三章游戏中的文字
- JS实现文字向上无缝滚动轮播
- 滚屏游戏-大空飞机
- 在DBGrid中实现鼠标滚轮的上下滚屏功能
- ACCESS中使用SQL语句应注意的地方及几点技巧
- 中国(江门)侨乡华人嘉年华暨2004中国(江门)侨乡旅游节
- 李开复给中国学生的第二封信:从优秀到卓越
- 观音度
- funny.exe病毒,让我受骂
- 实现游戏中的文字滚屏功能
- gmail 乱码解决方案
- 实现游戏中的简单打字功能
- 网页制作技巧
- 情感流逝
- 从C/S模式下的三层架构说起
- Datagrid技巧
- 设计模式之Bridge——游戏篇(原创)
- Vector、ArrayList和List的异同