美文网首页
(1) 早期的J2ME游戏--来画个框框呗

(1) 早期的J2ME游戏--来画个框框呗

作者: 吃豆腐不吐豆腐皮 | 来源:发表于2017-07-21 09:57 被阅读0次

    在android和ios出现之前,基本上都是J2ME游戏.
    虽然J2ME已经没落,但是现在还有一部分机顶盒游戏是使用它来开发的 = =||

    使用J2ME来做开篇呢,主要是因为我最早就是用它来做游戏开发的. 而且我也认为使用它更加有历史意义. 不过它的套路也工整,具一定参考性

    对这个平台,不感兴趣的话, 直接看最后的总结即可


    开始:

    首先需要创建一个MIDlet. J2ME游戏都是从这开始的.

    public class GmMain extends MIDlet {
    
        public GmMain() {
        }
    
        @Override
        protected void startApp() throws MIDletStateChangeException { //重要
        }
    
        @Override
        protected void pauseApp() {
        }
    
        @Override
        protected void destroyApp(boolean unconditional) throws MIDletStateChangeException {
        }
    
    }
    

    系统在启动的时候, 会自动调用MIDletstartApp(),然后进入到运行状态.
    而这个要被启动的MIDlet, 又是在配置文件jad里配置的(创建工程的时候,IDE会默认给配置)


    本次目标

    我们要画个正方形. 那我们需要哪些步骤呢?

    • 创建一个界面
    • 在界面中刷新绘图
    • 把目标界面显示出来

    恩. 是不是很简单? 哈哈哈哈..


    创建一个界面

    这里要创建的界面就是Canvas,也就是画布.

    class GmCanvas extends Canvas{
        
        @Override
        protected void paint(Graphics g) {
        }
    
    }
    

    画布中的这个 paint(Graphics g)方法, 就是我们需要进行绘画的地方, 而传进来的这个Graphics就是我们绘制的工具.

    这里看下官方对Canvas的描述:

    The Canvas class is a base class for writing applications that need to handle low-level events and to issue graphics calls for drawing to the display.

    直翻加粗的话就是"发出图形调用,以绘制到显示器", 对于绘画来讲, 这就是画布Canvas的作用


    开始画画

    不说废话,先在paint()里写点东西:

        @Override
        protected void paint(Graphics g) {
            int x = 0;
            int y = 0;
            int width = 50;
            int height = 50;
            
            g.setColor(0xFF0000); //设置颜色为红色
            g.fillRect(x, y, width, height); //填充一个矩形,左上角放在点0,0上,长/宽分别50
        }
    

    运行的效果如下:

    红色小框
    我们再在paint()里紧接着上面,加上几句:
            x = 90;
            y = 30;
            width = 30;
            height = 70;
            g.drawRect(x, y, width, height); //画一个矩形框,左上角放在点90,30上,长/宽分别30/70
            
            int startAngle = 0; 
            int arcAngle = 360;
            x = 70;
            y = 150;
            width = 45;
            height = 45;
            g.setColor(0x00FF00); //设置颜色为绿色
            g.fillArc(x, y, width, height, startAngle , arcAngle); //填充一个椭圆,放在点70,150上,长短轴都为45. 起始角度0度, 终止360度.
    

    运行效果如下:

    加了个矩形框和圆

    可以看出, Graphics提供了好多和画图相关的操作, 有设置颜色的,有画矩形,画圆,还有画图片等一系列操作. 在其它平台上,也有这样类似的组件,可以提供这样的操作.

    我们引用下官方在Graphics描述里的第一句话:

    Provides simple 2D geometric rendering capability.

    可以看到Graphics就是提供简单的2D几何渲染功能的工具


    你以为这样就结束了吗?

    NO!
    如果你仔细从上到下看了, 并且有条件自己去写了, 那么你会发现. 程序执行之后, 压根就没有任何东西画出来~~
    因为缺少了一个重要的, 在正常游戏开发中,只需要做一次的操作.
    那就是让这个创建出来的界面(Canvas), 被显示出来.

    这里就要用到Display. 不过我们依旧废话少说, 把最后的代码给补上, 补在MIDlet里:

    public class GmMain extends MIDlet {
    
        private GmCanvas canvas; //新增
        private Display display; //新增
        
        public GmMain() {
            this.display = Display.getDisplay(this); //获得该MIDlet所持有的,唯一与之绑定的Display
            this.canvas = new GmCanvas(); //创建我们自己的界面
        }
    
        @Override
        protected void startApp() throws MIDletStateChangeException {
            display.setCurrent(this.canvas); // 把我们创建的界面设置为Midlet当前所要展示的
        }
    
                .
                . 略
                .
    }
    

    代码的注释写已经比较清楚,有些细节我就不介绍了, 毕竟也没什么人用这个平台了.

    就这样,简单的图形绘制就完成了.


    总结

    从上面的代码里,我们可以总结出这么个套路:

    • 创建程序入口
    • 把我们自己的界面设置为需要显示的界面 (Display.getDisplay().setCurrent(this.canvas))
    • 通过界面提供的图形调用接口(Graphics)来渲染, 并在可以进行绘制的地方,如paint()里,进行绘制(有时候这些地方也可以是自己定义的).

    上面提到的Canvas.paint()就好比后面,讲Android时会用到的View里的onDraw()和iOS中UIVIew的drawRect(). 这些都是组件提供的,绘制界面的场地.

    所有的游戏,在系统框架的层面上讲, 都是这个套

    虽然这仅仅只是画了个图, 但一旦让他隔一段时间就刷新一次画面, 并且可以处理来自输入设备的消息,配上点逻辑就变成简单的游戏了.


    碎碎念:

    这篇东西可是花了我断断续续两天的时间, 中间经历了好几次类似于:" 写了两段, 看着不满意,删减成一段. 往后写了几行, 回过头一看, 又把那一段删成一两句话 ". 还不光是这样删删减减, 有些概念,之前认为自己应该了解的差不多了, 结果当要写出来时, 却发现某些描述还不够准确, 然后就各种查资料, 翻阅官方API. 这也是为什么,当出现一些'名词'的时候,我会加上官方说明链接. 这样就可以在我的解读之下,也有权威的描述可供参考. 在保证阅读流畅性的前提下, 也要尊重各位的理解能力, 不能描述的太简单或太啰嗦. 写这个东西可真辛苦呀 _(:з」∠)_

    相关文章

      网友评论

          本文标题:(1) 早期的J2ME游戏--来画个框框呗

          本文链接:https://www.haomeiwen.com/subject/lehrkxtx.html