热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

J2ME控制响应按键的算法以及冲突检测的方法和动画的处理

一响应按键保证左右移动停止后,恢复正向图像帧plane_sp.setFrame(0);intKeyStategetKeyStates();获得当前按键状态根据按键状

一 响应按键

//保证左右移动停止后,恢复正向图像帧
    plane_sp.setFrame(0);
    int KeyState = getKeyStates(); // 获得当前按键状态
    // 根据按键状态,飞机图象做相对移动,并判断是否超出屏幕边界

if ( (KeyState & UP_PRESSED) != 0) { // 上
      if (plane_sp.getY() - 3 <0) {
        plane_sp.move(0, 0 - plane_sp.getY()); //出边界的处理
      }
      else {
        plane_sp.move(0, -3); //正常处理
      }
      plane_sp.setFrame(0);
    }
    if ( (KeyState & DOWN_PRESSED) !&#61; 0) { // 下
      if (plane_sp.getY() &#43; 3 &#43; plane_sp.getHeight() > win_height) {
        plane_sp.move(0, win_height - plane_sp.getY() - plane_sp.getHeight());
      }
      else {
        plane_sp.move(0, 3);
      }
      plane_sp.setFrame(0);
    }
    if ( (KeyState & LEFT_PRESSED) !&#61; 0) { // 左
      if (plane_sp.getX() - 3 <0) {
        plane_sp.move(0 - plane_sp.getX(), 0);
      }
      else {
        plane_sp.move( -3, 0);
      }
      plane_sp.setFrame(1);
    }
    if ( (KeyState & RIGHT_PRESSED) !&#61; 0) { // 右
      if (plane_sp.getX() &#43; 3 &#43; plane_sp.getWidth() > win_width) {
        plane_sp.move(win_width - plane_sp.getX() - plane_sp.getWidth(), 0);
      }
      else {
        plane_sp.move(3, 0);
      }
      plane_sp.setFrame(2);
    }

二  冲突检测的方法

plane_sp.collidesWith(cloud_img, 20, 20, true)

sp0.collidesWith(sp1, pixelLevel)

分析:语法
 精灵与精灵的碰撞处理
public final boolean collidesWith(Sprite s, boolean pixelLevel)
                  pixelLevel取true代表像素检测模式,false代表区域检测模式

精灵与背景层的碰撞处理
public final boolean collidesWith(TiledLayer t,boolean pixelLevel)
                 pixelLevel取true代表像素检测模式,false代表区域检测模式

精灵与图象的碰撞处理
public final boolean collidesWith(Image image,int x,int y,boolean pixelLevel)
               image 碰撞图象,x,y为图象左上角坐标
               pixelLevel取true代表像素检测模式,false代表区域检测模式

如果要显示爆炸的图象指定出现位置的算法是
  飞机当前x 坐标-(爆炸图片的宽度-飞机的宽度)/2

三 动画的处理

1  Sprite类的构造器
创建只含有一针图象的非动画精灵对象
     public Sprite (Image image)
创建一个指定每针图象大小的动画精灵对象
    public Sprite (Image image,int frameWidth,int frameHeight)
指定一个已经创建好的精灵对象来创建一个新的精灵对象
   public Sprite (Sprite s)

2  Sprite类的一些方法
    ⑴重新设置精灵对象的Image图象
    public void setImage(Image img,int frameWidth,int frameHeight)
     返回所有原始图象针总数
     public int getRawFrameCount()
     依次正确播放动画
     public void nextFrame()
     逆向播放
     public void prevFrame()
     单针图象处理
     public void setFrame(int num)
                 num是指定图象的索引
     多针动画处理
     public void setFrameSequence(int[ ] sequence)
                 sequence是指定播放序列的整数数组
         获得精灵对象中指定的动画播放序列中一次循环的画面针数,用getFrameSequenceLength()得
         用 getFrame()返回当前图象针.
    ⑵设置精灵的位置
        public void setPosition(int x,int y)
       移动的处理
        public void move(int dx,int dy)
                   dx,dy是水平和垂直移动的距离.
       返回精灵的当前x,y坐标
        public final int getX()
        public final int getY()
      方位变换的处理
        public void setTransform(int transform)
        transform的值
            Sprite.TRANS_NONE      取值  0   效果:保持原位
            Sprite.TRANS_ROT90     取值  5   效果:顺时针旋转90度
            Sprite.TRANS_ROT180   取值  3   效果:顺时针旋转180度
            Sprite.TRANS_ROT270   取值  6   效果:顺时针旋转270度
            Sprite.TRANS_MIRROR   取值  2   效果:沿垂直轴翻转
            Sprite.TRANS_MIRROR_ROT90   取值  7     效果:沿垂直轴翻转再顺时针旋转90度
            Sprite.TRANS_MIRROR_ROT180   取值  1   效果:沿垂直轴翻转再顺时针旋转180度
            Sprite.TRANS_MIRROR_ROT270   取值  4   效果:沿垂直轴翻转再顺时针旋转270度

⑶  引用像素点处理

  设置引用像素点
  语法:   public void defineReferencePixel( int x, int y )
     x,y是相对于图像(Sprite类的实例)的x,y坐标,
  例如:sp1.defineReferencePixel(img_width1 / 2, 0);

通过引用像素点来定位
  语法:   public void setRefPixelPosition ( int x, int y )
           x,y是相对于手机屏幕的左上角点的坐标
例如:sp1.setRefPixelPosition(x1, y1);

获得当前精灵的引用像素点在系统中的位置
  语法:   public final int getX( )
              public final int getY( )

 


推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
author-avatar
犹豫的海波V5_697
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有