在Canvas中实现字母输入

简介: 在游戏开发中为了记录的用户积分,就需要用户输入自己的名字,这时就需要我们自己实现字母的输入。下面的代码演示了实现这个要求的方法。 /* * MainCanvas.java * * Created on 2006年8月7日, 下午1:45 * */ import javax.

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

/*
 * 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;
    }
  }
}

 
目录
相关文章
|
数据安全/隐私保护
ev4加密视频破解 ev4转换mp4转换工具 【无须授权密码】
ev4加密视频破解 ev4转换mp4转换工具 【无须授权密码】
12644 1
ev4加密视频破解 ev4转换mp4转换工具 【无须授权密码】
|
数据安全/隐私保护 网络架构
DSL线路如何工作?
【4月更文挑战第15天】
588 3
DSL线路如何工作?
|
数据采集 监控 数据可视化
BI工具在数据分析和业务洞察中的应用
BI工具在数据分析和业务洞察中的应用
334 11
|
JSON JavaScript 前端开发
js将json字符串还原为json
【6月更文挑战第15天】js将json字符串还原为json
179 4
|
机器学习/深度学习 存储 人工智能
人工智能的伦理困境与挑战
在本文中,我们将探讨人工智能技术的快速发展所带来的一系列伦理问题和挑战。随着AI技术的不断进步和应用范围的扩大,如何确保其发展符合道德标准、保护个人隐私以及避免潜在的社会不公成为了亟待解决的问题。本文旨在通过分析当前AI领域面临的主要伦理困境,并提出可能的解决方案或缓解措施,以促进更加负责任地使用和发展人工智能技术。
1195 1
|
机器学习/深度学习 分布式计算 算法框架/工具
大模型的内部结构复杂,导致其决策过程难以解释,这对于某些应用场景来说是不可接受的。
【10月更文挑战第23天】随着人工智能技术的发展,越来越多的企业开始探索大模型的私有化部署。本文详细介绍了在企业内部实现大模型私有化部署的方法,包括硬件配置、数据隐私保护、模型可解释性提升以及模型更新和维护等方面的解决方案,帮助企业克服相关挑战,提高数据处理的安全性和效率。
233 4
|
Java Android开发 Swift
掌握安卓与iOS应用开发:技术比较与选择指南
在移动应用开发领域,谷歌的安卓和苹果的iOS系统无疑是两大巨头。它们不仅塑造了智能手机市场,还影响了开发者的日常决策。本文深入探讨了安卓与iOS平台的技术差异、开发环境及工具、以及市场表现和用户基础。通过对比分析,旨在为开发者提供实用的指导,帮助他们根据项目需求、预算限制和性能要求,做出最合适的平台选择。无论是追求高度定制的用户体验,还是期望快速进入市场,本文都将为您的开发旅程提供有价值的见解。
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先讲解了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着,详细说明了如何安装Python和Scikit-learn,加载和处理数据,选择和训练模型,以及评估模型性能。最后,简要介绍了模型选择和超参数调优等高级话题,帮助初学者逐步掌握机器学习的核心技能。
136 1
|
机器学习/深度学习 编解码 缓存
CPU型号分析避坑指南——2、游戏电脑与办公电脑CPU该如何选择
CPU型号分析避坑指南——2、游戏电脑与办公电脑CPU该如何选择
437 0
|
存储 Android开发
Eclipse安装Flowable Eclipse Designer插件实现图形建模BPMN 2.0流程图
Eclipse安装Flowable Eclipse Designer插件实现图形建模BPMN 2.0流程图
833 0