服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

实现游戏中的简单打字功能

    本文讲述如何在游戏开发中实现类似于打字的功能,其实原理和前面讲述的文字滚屏差别不大,主要还是利用timer和canvas提供的函数。

    我们的目的是把几个字按照顺序和一定的时间间隔打印在屏幕上,这就要求我们计算好文字的宽度和具体打印的位置。例如这样一个数组
    private final string[] content = { "hello ", "world ", "who ", "are ","you ", "?" };
我使用的办法是计算它们的相对距离,这样我用一个int类型的数组来存储这些数值。
    private int[] slen = new int[content.length];
slen[0]存储字开始打印的位置,这里我设置为10,slen[1]则存储开始位置与hello这个字的长度之和作为下个单词world的开始位置,依次类推。
    private void initslen()
    {

        int temp = 10;

        for (int i = 0; i < content.length; i++)
        {
            slen[i] = temp;
            temp = temp + font.stringwidth(content[i]);

        }
    }
注意这里并没有考虑屏幕宽度的因素,如果你要显示多行的话应该考虑到屏幕的宽度,调整你的算法。

    在paint()方法里面我们就按照得到的坐标位置进行绘画
    protected void paint(graphics arg0)
    {
        if (first)
        {
            arg0.setcolor(128, 0, 128);
            arg0.fillrect(0, 0, getwidth(), height);
            first = false;

        }
        arg0.setcolor(255, 255, 255);

        arg0.setfont(font);
        arg0.drawstring(content[i], slen[i], height / 2, graphics.left
                | graphics.top);
    }
程序并不复杂,下面给出图例和源代码。
实现游戏中的简单打字功能

 

 

 

 

 

 

 

 


import javax.microedition.lcdui.display;
import javax.microedition.midlet.midlet;
import javax.microedition.midlet.midletstatechangeexception;

public class typemidlet extends midlet
{

    private display display;
    private typecanvas typecanvas;

    protected void startapp() throws midletstatechangeexception
    {

        display = display.getdisplay(this);
        typecanvas = new typecanvas();
        display.setcurrent(typecanvas);

    }

    protected void pauseapp()
    {

    }

    protected void destroyapp(boolean arg0) throws midletstatechangeexception
    {

    }

}

import java.util.timer;
import java.util.timertask;

import javax.microedition.lcdui.canvas;
import javax.microedition.lcdui.display;
import javax.microedition.lcdui.displayable;
import javax.microedition.lcdui.font;
import javax.microedition.lcdui.graphics;

public class typecanvas extends canvas
{
    private timer timer = new timer();
    private int i = 0;
    private boolean first = true;
    private int height = getheight();
    font font = font.getfont(font.face_system, font.style_bold,
            font.size_medium);
    private final string[] content = { "hello ", "world ", "who ", "are ",
            "you ", "?" };
    private int[] slen = new int[content.length];

    public typecanvas()
    {
        super();
        initslen();
        typetask tt = new typetask();
        timer.schedule(tt, 300, 300);

    }

    protected void paint(graphics arg0)
    {
        if (first)
        {
            arg0.setcolor(128, 0, 128);
            arg0.fillrect(0, 0, getwidth(), height);
            first = false;

        }
        arg0.setcolor(255, 255, 255);

        arg0.setfont(font);
        arg0.drawstring(content[i], slen[i], height / 2, graphics.left
                | graphics.top);
    }

    private void initslen()
    {

        int temp = 10;

        for (int i = 0; i < content.length; i++)
        {
            slen[i] = temp;
            temp = temp + font.stringwidth(content[i]);

        }
    }

    private class typetask extends timertask
    {
        public void run()
        {

            if (i < content.length - 1)
            {
                repaint();
                i++;
            } else
            {
                timer.cancel();
            }

        }
    }
}

扫描关注微信公众号