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

原创 2004年10月14日 11:33:00
本文讲述如何在游戏开发中实现类似于打字的功能,其实原理和前面讲述的文字滚屏差别不大,主要还是利用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);
    }
程序并不复杂,下面给出图例和源代码。
2004929103745734.gif

 

 

 

 

 

 

 

 


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();
            }

        }
    }
}

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

本文讲述如何在游戏开发中实现类似于打字的功能,其实原理和前面讲述的文字滚屏差别不大,主要还是利用Timer和Canvas提供的函数。    我们的目的是把几个字按照顺序和一定的时间间隔打印在屏幕上,这...
  • mobilechannel
  • mobilechannel
  • 2005年11月29日 16:47
  • 758

C#小游戏,拼音打字练习

博主又做了一款C#小游戏,看界面 会发激光的,截图截不到,而且加了很多音效。排行榜 这里排行榜是放在博主的服务器数据库里的。这里输入对应的拼音,按回车,就会从你的坦克发射激光击毁目标,并且得分。很...
  • wf824284257
  • wf824284257
  • 2016年12月30日 15:35
  • 808

C#打字游戏

 //打字游戏        private void Form1_Load(object sender, EventArgs e)        ...{            this.timer...
  • wxg22526451
  • wxg22526451
  • 2008年03月27日 10:04
  • 2394

JavaScript打字游戏 01

//下面都是定义的全局资源 var con = document.getElementById(“con”); var ii = 0; //字母数量的计数器 var color = ne...
  • wx11055
  • wx11055
  • 2016年01月06日 22:18
  • 148

《游戏脚本的设计与开发》-第一章总结 文字脚本的功能扩展和一个游戏测试

脚本系列文章写了好几篇了,大家可能都不清楚这些脚本有什么用,游戏中如何能应用到这些东西。当然,目前所介绍的内容还只是个简单的开头,说到做游戏还远远不够。不过,本次就使用前几章所介绍的内容,先来尝试一下...
  • lufy_Legend
  • lufy_Legend
  • 2013年06月24日 12:14
  • 8428

【COCOS2DX-游戏开发之七】添加启动数字输入法的功能

cocos2d-x 里面默认输入法只有一种,就是启动的时候就是系统默认的输入法,然后可以切换数字,中英文等等, 但是我们程序里有个功能设置价格,不希望能够输入中英文,只要输入数字,输入以后再判断显...
  • teng_ontheway
  • teng_ontheway
  • 2013年06月24日 12:35
  • 4630

关于游戏中的特效

特效是游戏中增加交互印象的很重要一方面,一个好的特效系统能够很大程度上提高游戏的特色。这尤其体现在动作游戏上,比如God of War,Ninja Gaiden等系列中的特效效果就很出彩。这里简单总结...
  • BugRunner
  • BugRunner
  • 2012年06月30日 21:43
  • 7204

一个简单的游戏(1)

写篇文章,做一个简单的游戏 C/C++, Visual Studio 6.没有设计图,直接贴代码了.1.MessageType.h : 用于Server和Client之间的交互, 比如玩家用来交流的T...
  • sugarshop
  • sugarshop
  • 2007年11月13日 21:29
  • 504

NGUI添加一些特殊的效果(打字机。。)

添加打字机效果:新建一个Label控件,
  • zky1347888
  • zky1347888
  • 2014年11月13日 20:22
  • 2043

UE4学习笔记3rd:配置游戏输入

继续之前未完成的内容,对输入进行设置。 打开虚幻编辑器,进入昨天未完成的项目中。 在左上角的编辑选项中,选择项目设置。 我要处理的是玩家的输入,因此选择输入选项 调整设置如下 这里说明一下,...
  • a6813140
  • a6813140
  • 2017年08月17日 13:03
  • 137
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实现游戏中的简单打字功能
举报原因:
原因补充:

(最多只允许输入30个字)