在Canvas中实现字母输入

在游戏开发中为了记录的用户积分,就需要用户输入自己的名字,这时就需要我们自己实现字母的输入。下面的代码演示了实现这个要求的方法。

/*
 * MainCanvas.java
 *
 * Created on 2006年8月7日, 下午1:45
 *
 */

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;

/**
 *
 * @author mydeman
 */
public class MainCanvas extends Canvas{
 
  //记录当前按了几次Fire键
  private static int keyPressedCount = 0;
  //当前显示的屏幕
  private static int screenIndex = -1;
  //定义字母表
  private static final String[] ALPHABET = {
    "A","B","C","D","E","F","G","H","I","J","K",
    "L","M","N","O","P","Q","R","S","T","U","V",
    "W","X","Y","Z"
  };
 
  /** Creates a new instance of MainCanvas */
  public MainCanvas() {
    setFullScreenMode(true);
  }
 
  //显示的字母的个数
  private static int alphaNum = 0;
 
  /**
   * 根据屏幕索引,绘制屏幕
   */
  protected void paint(Graphics g) {
    switch(screenIndex) {
      //绘制黑色背景
      case -1 :
        g.setColor(0, 0, 0);
        g.fillRect(0, 0, getWidth(), getHeight());
        break;
      //绘制字母
      case 1 :
        //设置重绘的区域
        g.setClip(30 + 15 * alphaNum, 100, 30 + 15 * (alphaNum + 1), 100);
        g.setColor(0, 0, 0);
        g.fillRect(30 + 15 * alphaNum, 100, 30 + 15 * (alphaNum + 1), 100);
        //绘制字母
        g.setColor(0, 255, 0);
        g.drawString(ALPHABET[keyPressedCount], 30 + 15 * alphaNum, 100,
          Graphics.TOP | Graphics.LEFT);
        break;
    }
  }
 
  /**
   * 刷新屏幕
   */
  private void refresh() {
    repaint();
    serviceRepaints();
  }
 
  private long old_time = 0;
  /**
   * 按键事件处理
   */
  public void keyPressed(int keyCode) {
    switch(getGameAction(keyCode)) {
      case Canvas.FIRE :
        //绘制的最大字母数为5个
        if(alphaNum <= 5) {
          //设置屏幕索引为1
          screenIndex = 1;
          //获得当前时间
          long current = System.currentTimeMillis();
          //如果当前时间和上次按键时间相差大于800ms,并且字母个数小于5个,
          //则绘制下一个字母,同时将按键的次数设为0
          if(current - old_time > 800 && alphaNum < 5) {
            alphaNum ++;
            keyPressedCount = 0;
          } else {
            //如果按键到了25次,也就是最后一个字母,则按键次数从0开始计数
            keyPressedCount = (keyPressedCount == 25) ? 0 : (keyPressedCount + 1);
          }
          //保存当前按键时间
          old_time = current;
          //刷新屏幕
          refresh();
        }
        break;
    }
  }
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mydeman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值