`
totoxian
  • 浏览: 1080453 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

通过处理按键模拟加速度,刹车等功能

阅读更多

import java.lang.*;
import java.io.*;
import java.util.*;
import javax.microedition.lcdui.*;

public class gKey {
public int key_UP;
public int key_DOWN;
public int key_LEFT;
public int key_RIGHT;
public int key_A;
public int key_B;
public int key_C;
public int key_D;
public int key_STAR;
public int key_POUND;
public int key_TIMER;
public int movespeed ;
public int leftvalue ;
public int upvalue ;
public int rightvalue ;
public int downvalue ;

public gKey ( int keytime , int mspeed )
{
key_TIMER = keytime ;
refreshKey() ;
movespeed = mspeed ;
}

public void refreshKey ()
{
key_UP = 0 ;
key_DOWN = 0 ;
key_LEFT = 0 ;
key_RIGHT = 0 ;
key_A = 0 ;
key_B = 0 ;
key_C = 0 ;
key_D = 0 ;
key_STAR = 0 ;
key_POUND = 0 ;
}

public void flushKey ()
{
if ( key_UP > 0 )
if ( key_UP < key_TIMER ) key_UP += upvalue ;
if ( key_DOWN > 0 )
if ( key_DOWN < key_TIMER ) key_DOWN += downvalue ;
if ( key_LEFT > 0 )
if ( key_LEFT < key_TIMER ) key_LEFT += leftvalue;
if ( key_RIGHT > 0 )
if ( key_RIGHT < key_TIMER ) key_RIGHT += rightvalue ;
}

public void keyPressed(int keyCode,Canvas canvas)
{
switch (canvas.getGameAction(keyCode)) {
case Canvas.UP:
key_UP = (key_UP < key_TIMER)?key_UP+movespeed:key_TIMER ;
upvalue = movespeed ;
break;
case Canvas.DOWN:
key_DOWN = (key_DOWN < key_TIMER )?key_DOWN+movespeed:key_TIMER ;
upvalue = movespeed ;
break;
case Canvas.LEFT:
key_LEFT = (key_LEFT < key_TIMER )?key_LEFT+movespeed:key_TIMER ;
leftvalue = movespeed ;
break;
case Canvas.RIGHT:
key_RIGHT = (key_RIGHT < key_TIMER )?key_RIGHT+movespeed:key_TIMER ;
rightvalue = movespeed ;
break;
case Canvas.GAME_A:
key_A = (key_A < key_TIMER )?key_A+1:key_TIMER ;
break;
case Canvas.GAME_B:
key_B = (key_B < key_TIMER )?key_B+1:key_TIMER ;
break;
case Canvas.GAME_C:
key_C = (key_C < key_TIMER )?key_C+1:key_TIMER ;
break;
case Canvas.GAME_D:
key_D = (key_D < key_TIMER )?key_D+1:key_TIMER ;
break;
case 0:
switch (keyCode) {
case Canvas.KEY_NUM2:
key_UP = (key_UP < key_TIMER )?key_UP+movespeed:key_TIMER ;
upvalue = movespeed ;
break;
case Canvas.KEY_NUM8:
key_DOWN = (key_DOWN < key_TIMER )?key_DOWN+movespeed:key_TIMER ;
upvalue = movespeed ;
break;
case Canvas.KEY_NUM4:
key_LEFT = (key_LEFT < key_TIMER )?key_LEFT+movespeed:key_TIMER ;
leftvalue = movespeed ;
break;
case Canvas.KEY_NUM6:
key_RIGHT = (key_RIGHT < key_TIMER )?key_RIGHT+movespeed:key_TIMER ;
rightvalue = movespeed ;
break;
case Canvas.KEY_POUND:
key_POUND = (key_POUND < key_TIMER )?key_POUND+1:key_TIMER ;
break;
case Canvas.KEY_STAR:
key_STAR = (key_STAR < key_TIMER )?key_STAR+1:key_TIMER ;
break;
}
break;
}
}

public void keyReleased(int keyCode,Canvas canvas) {
switch (canvas.getGameAction(keyCode)) {
case Canvas.UP:
upvalue = - (key_UP / 4) ;
break;
case Canvas.DOWN:
downvalue = - (key_DOWN / 4) ;
break;
case Canvas.LEFT:
leftvalue = - (key_LEFT / 4) ;
break;
case Canvas.RIGHT:
rightvalue = -(key_RIGHT / 4) ;
break;
case Canvas.GAME_A:
key_A = 0 ;
break;
case Canvas.GAME_B:
key_B = 0 ;
break;
case Canvas.GAME_C:
key_C = 0 ;
break;
case Canvas.GAME_D:
key_D = 0 ;
break;
case 0:
switch (keyCode) {
case Canvas.KEY_NUM2:
upvalue = -(key_UP / 4) ;
break;
case Canvas.KEY_NUM8:
downvalue = -(key_DOWN / 4) ;
break;
case Canvas.KEY_NUM4:
leftvalue = -(key_LEFT / 4) ;
break;
case Canvas.KEY_NUM6:
rightvalue = -(key_RIGHT / 4) ;
break;
case Canvas.KEY_POUND:
key_POUND = 0 ;
break;
case Canvas.KEY_STAR:
key_STAR = 0 ;
break;
}
break;
}
}

}

import java.lang.*;
import java.io.*;
import java.util.*;
import javax.microedition.lcdui.*;

public class gCanvas extends Canvas implements Runnable {

private Graphics bgGraphics;
private Image bgBuf;
private int width ;
private int height ;
private int dfwidth ;
private int dfheight ;
private int snoffx ;
private int snoffy ;
private boolean isOver;
private boolean isFirstRun ;
public gKey keyParam ;
public int thDelay ;
private Thread mThread ;


// test
private int x,y ;

public gCanvas (int w,int h,int keytimer,int thdelay)
{
try{
width = getWidth() ;
height = getHeight() ;
dfwidth = w ;
dfheight = h ;
isFirstRun = true ;
snoffx = ( width - dfwidth ) / 2 ;
snoffy = ( height - dfheight ) / 2 ;
isOver = false ;
bgBuf = Image.createImage ( dfwidth, dfheight ) ;
bgGraphics = bgBuf.getGraphics() ;
mThread = new Thread(this) ;
x = 0 ;
y = 0 ;
keyParam = new gKey ( keytimer) ;
thDelay = thdelay ;
// test
}
catch(Exception ex){
isOver = true ;
}

}


public void OverProcess ()
{
isOver = true ;
// add destroy code
}

public void run ()
{
try{
while ( !isOver )
{
// add execute code
if ( keyParam.key_A > 0 ){
keyParam.refreshKey() ;// 键按下后只响应一次要调用这个函数
OverProcess() ;
}

if ( y > 0 ) y -= keyParam.key_UP ;
if ( y < width - 32 ) y += keyParam.key_DOWN ;//这里读出来的值不是顾定的,你按的越长值越大,上限是keytime,表示加速度,当你松开键时这里的值不会马上为0,但是会很快变成0,表示惯性
if ( x > 0 ) x -= keyParam.key_LEFT ;
if ( x < height - 32 ) x += keyParam.key_RIGHT ;
keyParam.flushKey() ;


repaint() ;
mThread.sleep(thDelay);
}
}
catch(Exception ex)
{}
}

public void paint (Graphics g)
{
// clear screen
if ( isFirstRun == true ){
g.setColor(0) ;
g.fillRect ( 0 , 0 , width , height ) ;
}


// add draw function

g.drawImage (bgBuf,snoffx,snoffy,g.LEFT|g.TOP) ;
}


public void keyPressed(int keyCode) {
keyParam.keyPressed(keyCode,this) ;
}


public void keyReleased(int keyCode) {
keyParam.keyReleased(keyCode,this) ;
}

}

分享到:
评论

相关推荐

    基于STM32单片机设计adxl345加速度传感器软件例程源码(可串口打印数据)

    adxl345加速度传感器STM32单片机软件例程源码(可串口打印数据) int main(void) { u8 key; u8 t=0; short x,y,z; short angx,angy,angz; delay_init(); //延时初始化 LED_Init(); //初始化与LED连接的硬件接口 KEY...

    模拟汽车速度控制系统的设计(汇编语言)+ 详细设计报告

    用实验箱上4*4键盘的按键模拟汽车的挡杆,用发光二极管显示挡位,用数码管显示汽车的速度。 1、“1”键启动系统,汽车以最低速度行驶,同时用1盏绿灯显示挡位,数码管显示速度(最低速度为5Km/h)。当需要换档时,用...

    基于FPGA的汽车尾灯控制电路设计 (1).pdf

    参考文献中提供的FPGA相关研究,涉及汽车尾灯控制电路设计,数字加速度计设计等,为本设计提供了理论基础和实践经验。通过这些文献,可以了解到FPGA技术在不同领域的应用情况和可能面临的挑战。 九、作者简介与联系...

    DL系列数字士波器和记录仪手册.pdf

    这些模块包括不同速率和分辨率的绝缘模块、温度/高精度电压绝缘模块、应变模块、加速度/电压模块以及频率模块等。 DL系列的软件工具如Wirepuller和WaveformViewer可用于从PC远程控制DL系列设备,并观察波形信号。...

    js做的赛车

    游戏的核心逻辑、动画效果、事件处理等都可以通过JavaScript实现。开发者需要掌握变量、数据类型、控制结构(如if语句和循环)、函数、对象等基础知识。 2. **HTML5 Canvas** 游戏画面通常会利用HTML5的Canvas元素...

    J2ME-simple-tutorial-programming.rar_j2me racing_java programmin

    4. **物理模拟**:为了使游戏更逼真,可能需要引入基本的物理模拟,例如赛车的加速度、摩擦力和重力等。这些可以通过数学模型和公式来实现。 5. **用户输入处理**:J2ME支持键盘和触摸屏输入。你需要监听按键事件,...

    python3摩托车游戏.zip

    6. 物理模拟:虽然未具体提及,但摩托车的移动和碰撞可能涉及到简单的物理计算,如速度、加速度、碰撞检测等。 7. 游戏逻辑:包括摩托车的行驶、障碍物的生成、得分系统、游戏状态的切换(如开始、暂停、结束)等。 ...

    2284282812AQMD6008BLS-TF_UM_V0.90.pdf

    - **手动控制**:通过按键直接控制电机的启动、停止、加速、减速等。 - **信号源选择**:可以选择不同的信号作为电机控制的输入,如模拟信号、数字信号等。 - **工作模式配置**:可以通过按键设置不同的工作模式,如...

    轮椅直流无刷电机的单片机控制电路设计.pdf

    系统组成包含多个模块,如人机接口模块、LED显示驱动电路、按键输入检测电路、模拟信号温度检测与过温保护电路、电源管理模块以及MCU刹车控制及检测电路等。这些模块协同工作,确保电动轮椅的平稳运行和安全保护。 ...

    台湾新代 台湾新代控制器

    10. 键盘PLC功能:允许用户通过键盘模拟轴向运动和启动/暂停加工,提高操作便捷性。 11. JOG feedrate override在开机未寻原点前设定为10%速度,以保护机器。 12. 单键触发自动刀长量测:包括手动模式下按"G"键,Z...

    赛车游戏 J2ME源码程序

    开发者可以利用J2ME的数学库来计算车辆的速度、加速度和角速度。 4. **游戏循环**:所有游戏都基于一个游戏循环(Game Loop)来保持游戏状态的更新。这个循环不断地检测用户输入、更新游戏状态、渲染画面,并控制...

    赛车游戏文档归纳.pdf

    代码中定义了常量和变量,如最大速度(maxSpeed)、加速度(accel)、减速率(decel)等,以控制赛车的行为。同时,通过监听`Event.ENTER_FRAME`事件实现游戏循环,`KeyboardEvent.KEY_DOWN`和`KeyboardEvent.KEY_UP...

    赛车游戏

    JavaScript可以实现基本的物理计算,如速度、加速度和摩擦力的计算。 5. **游戏状态管理**:赛车游戏有多种状态,如比赛开始、赛车行驶、碰撞、终点等。通过JavaScript对象和类,我们可以设计一个游戏状态机来管理...

    c语言编写单片机技巧

    嵌入式DSP专门用来处理对离散时间信号进行极快的处理计算,提高编译效率和执行速度。在数字滤波、FFT(Fast Fourier Transform)、频谱分析、图像处理的分析等领域,DSP正在大量进入嵌入式市场。 18. MCU在...

Global site tag (gtag.js) - Google Analytics