郭克华手机编程教学视频----我的练习源码(31)GameCanvas基本测试

 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lession22;

import java.io.IOException;
import java.util.Random;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.midlet.*;

/**
 *
 * javax.microedition.lcdui.game:J2ME提供的加强游戏性能的包
 * GameCanvas:游戏画布,比普通画布更加适合游戏开发
 * Layer:图层,表示在游戏画面上可移动的物体,抽象类
 * LayerManager:图层管理器,管理图层的变换
 * Sprite:精灵,表示游戏中的各种角色,比如子弹,汽车等。
 * TitedLayer:布局层,充当环境角色,如地图。
 * GameCanvas基本测试
 *
 * GameCanvas是游戏画布
 *
 * @author mouyong
 */
public class GameCanvasMidlet1 extends MIDlet {

    MyGameCanvas mygame = new MyGameCanvas();
    Display dis = Display.getDisplay(this);

    public void startApp() {
        dis.setCurrent(mygame);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    //GameCanvas可以不用重写paint(),也就意味着不重绘整个画面
    class MyGameCanvas extends GameCanvas implements Runnable {
        //获得画笔

        private Graphics gra = this.getGraphics();
        //精灵
        private Sprite sprite;
        //旋转的状态,用于每一秒钟旋转一次图片
        private int state = Sprite.TRANS_NONE;

        //由于GameCanvas沒有默认构造方法,所以得写一个构造方法来完成构造
        public MyGameCanvas() {
            //这里的true,表示只让与游戏有关的键可以使用。
            super(true);
            /******************************精灵*******************************/
            try {
                //精灵
                sprite = new Sprite(Image.createImage("/lession22/iboy.gif"));

            } catch (IOException ex) {
                ex.printStackTrace();
            }

            /******************************旋转和悬挂点**********************/
            //定义悬挂点(0,0)注意,这个坐标是图片本身的坐标
            sprite.defineReferencePixel(0, 0);
            //将悬挂点绑定到屏幕上的一个位置(100,100),注意,这个坐标是屏幕坐标
            sprite.setRefPixelPosition(100, 100);
            new Thread(this).start();
        }

        public void run() {
            //new一个随机数,以便绘制随机线条
            Random rand = new Random();

            while (true) {

                /**********************************游戏画布************************************/
                //构造函数传了true,表示可以通过getKeyStates()来查询键的状态
                //这样,我们就可以直接在线程中对按键进行判断
                //System.out.println(getKeyStates());
                //写法:getKeyStates()==GameCanvas.XXXXXX_PRESSED表示某键被按下
//                if (this.getKeyStates() == GameCanvas.LEFT_PRESSED) {
//                    System.out.println("左键被按下");
//                }
//                try {
//                    Thread.currentThread().sleep(1000);
//                } catch (InterruptedException ex) {
//                    ex.printStackTrace();
//                }
//
//                //使用getGraphics()获得画笔,直接重绘
//                //this.getGraphics().drawRect(10, 20, 100, 100);
//
//
//
//                gra.drawLine(rand.nextInt(), rand.nextInt(), rand.nextInt(), rand.nextInt());
//                //画笔第一次直接画在屏幕上,但之后都是画在缓冲中,所以需要刷新缓冲
//                this.flushGraphics();
                /******************************精灵*******************************/
//                try {
//                    //局部刷新,将原来的图片清除
//                    gra.setColor(255, 255, 255);
//                    gra.fillRect(sprite.getX(), sprite.getY(), sprite.getWidth(), sprite.getHeight());
//
//                    //移动精灵:x每次移动1个像素,y每次移动0个像素
//                    sprite.move(1, 0);
//                    //将图片画到画布上
//                    sprite.paint(gra);
//                    //需要刷新缓冲
//
//                    this.flushGraphics();
//
//                    Thread.sleep(100);
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
                /******************************旋转和悬挂点**********************/
                //让图片旋转
                switch (state) {
                    case Sprite.TRANS_NONE:
                        state = Sprite.TRANS_ROT90;
                        break;
                    case Sprite.TRANS_ROT90:
                        state = Sprite.TRANS_ROT180;
                        break;
                    case Sprite.TRANS_ROT180:
                        state = Sprite.TRANS_ROT270;
                        break;
                    case Sprite.TRANS_ROT270:
                        state = Sprite.TRANS_NONE;
                        break;
                }
                //局部刷新,将原来的图片清除
                gra.setColor(255, 255, 255);
                gra.fillRect(sprite.getX(), sprite.getY(), sprite.getWidth(), sprite.getHeight());
                sprite.setTransform(state);
                sprite.paint(gra);
                this.flushGraphics();
                try {
                    Thread.sleep(1000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

默然说话

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

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

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

打赏作者

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

抵扣说明:

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

余额充值