Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 315|回复: 0

[J2ME学习]实现游戏开发中的屏幕滚动功能

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-11 01:57:33 | 显示全部楼层 |阅读模式
    J2ME游戏开发中使用层的概念中介绍了如何在游戏开发中使用层,其中提到LayerManager的一个概念,View Window,本文将借助这个概念实现屏幕滚动的功能。
       
      
      
       
       
       
         
       
                            
         
       
            屏幕的移动效果一般我们是通过改变View Window的的位置来实现的,比如你想屏幕向右移动,那么你要调整View Window的x坐标增加相应的数值,如果想屏幕向左移动,那么调整View Window的x坐标减少相应的数值。

            上下移动原理一样。我们在得到用户的输入后就可以对View Window的位置进行调整然后重新绘制屏幕。

      private void input()
         {
             int keyStates = getKeyStates();

             if ((keyStates & LEFT_PRESSED) != 0)
             {
                 if (scnX - 1 > 0)
                     scnX--;
             }
      
      
      
       
       
                   
        if ((keyStates & RIGHT_PRESSED) != 0)
             {
                 if (scnX + 1 + 140 < backgroundImage.getWidth())
                     scnX++;
             }
             
         }

         // Method to Display Graphics
         private void drawScreen(Graphics g)
         {

             g.setColor(0xffffff);
             g.fillRect(0, 0, getWidth(), getHeight());
             g.setColor(0x0000ff);

             // display all layers
             layerManager.setViewWindow(scnX, scnY, 140, 140);
             layerManager.paint(g, 20, 20);

             flushGraphics();
         }

    我们只使用一个背景图片如下:



    由于程序比较简单,这里直接给出源代码不做过多的解释。

    import javax.microedition.lcdui.*;
    import javax.microedition.lcdui.game.*;

    public class ExampleGameCanvas extends GameCanvas implements Runnable
    {
         private boolean isPlay; // Game Loop runs when isPlay is true
         private long delay; // To give thread consistency
         private int width; // To hold screen width
         private int height; // To hold screen height
         private int scnX, scnY; // To hold screen starting viewpoint

         // Sprites to be used
         Image backgroundImage;
         private Sprite backgroundSprite;

         // Layer Manager
         private LayerManager layerManager;

         // Constructor and initialization
         public ExampleGameCanvas() throws Exception
         {
             super(true);
             width = getWidth();
             height = getHeight();

             scnX = 55;
             scnY = 20;
             delay = 20;

             // Load Images to Sprites
             backgroundImage = Image.createImage("/background.png");
             backgroundSprite = new Sprite(backgroundImage);

             layerManager = new LayerManager();
             layerManager.append(backgroundSprite);

         }

         // Automatically start thread for game loop
         public void start()
         {
             isPlay = true;
             Thread t = new Thread(this);
             t.start();
         }

         public void stop()
         {
             isPlay = false;
         }

         // Main Game Loop
         public void run()
         {
             Graphics g = getGraphics();
             while (isPlay == true)
             {

                 input();
                 drawScreen(g);
                 try
                 {
                     Thread.sleep(delay);
                 } catch (InterruptedException ie)
                 {
                 }
             }
         }

         // Method to Handle User Inputs
         private void input()
         {
             int keyStates = getKeyStates();

             if ((keyStates & LEFT_PRESSED) != 0)
             {
                 if (scnX - 1 > 0)
                     scnX--;
             }
             if ((keyStates & RIGHT_PRESSED) != 0)
             {
                 if (scnX + 1 + 140 < backgroundImage.getWidth())
                     scnX++;
             }
             
         }

         // Method to Display Graphics
         private void drawScreen(Graphics g)
         {

             g.setColor(0xffffff);
             g.fillRect(0, 0, getWidth(), getHeight());
             g.setColor(0x0000ff);

             // display all layers
             layerManager.setViewWindow(scnX, scnY, 140, 140);
             layerManager.paint(g, 20, 20);

             flushGraphics();
         }

    }


    import javax.microedition.midlet.*;
    import javax.microedition.lcdui.*;

    public class SimpleScrollingLayerManger extends MIDlet
    {
         private Display display;

         public void startApp()
         {
             try
             {
                 display = Display.getDisplay(this);
                 ExampleGameCanvas gameCanvas = new ExampleGameCanvas();
                 gameCanvas.start();
                 display.setCurrent(gameCanvas);
             } catch (Exception ex)
             {
                 System.out.println(ex);
             }
         }

         public Display getDisplay()
         {
             return display;
         }

         public void pauseApp()
         {
         }

         public void destroyApp(boolean unconditional)
         {
             exit();
         }

         public void exit()
         {
             System.gc();
             destroyApp(false);
             notifyDestroyed();
         }
    }
       
      
         
          
          
            
            

             
            

             
            
          
         
       

       
      
       
       
      


    源码下载:http://203.93.208.26/kj/cwb/dir7/SimpleSr.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 13:38 , Processed in 0.297943 second(s), 36 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表