初探PHP7新扩展ui(GUI) – 千丝海阁

首页 » PHP » 初探PHP7新扩展ui(GUI)

初探PHP7新扩展ui(GUI)

2154 4

PHP7出来已经很久了,今天找资料的时候,发现PHP7版本增加了一个新扩展ui,能实现图形化的界面,大概尝试了一下,感觉类似java。官方链接见ui扩展,此扩展目前最高版本是2.0,支持php7.0和php7.1,tiandi试了在php7.2下安装,结果报错,估计要等下一个版本才能用在php7.2下了。

官方自带了3个DEMO,贪吃蛇,星空,和趋势图,都可以从上面的URL里介绍的git地址获取得到。看了贪吃蛇和星空的源码,简化了一下,tiandi制作了一个更简单的Demo,控制一个小方块在屏幕里上下左右移动。

代码如下,通过onKey事件来进行上下左右按键的行为。注意,这里需要判定当前方块的所在位置是否已出窗口边缘。

<?php
use UI\Window;
use UI\Point;
use UI\Size;
use UI\Area;
use UI\Key;
use UI\Controls\Box;
use UI\Draw\Pen;
use UI\Draw\Path;
use UI\Draw\Color;
use UI\Executor;

define('WINWIDTH',640); //窗口宽度
define('WINHEIGHT',480);  //窗口高度
define('MYSIZE',20);  //方块大小

$win = new class("可移动的方块DEMO", new Size(WINWIDTH, WINHEIGHT), false) extends Window {

    public function addExecutor(Executor $executor) {
        $this->executors[] = $executor;
    }

    protected function onClosing() {
       foreach ($this->executors as $executor) {
            $executor->kill();
       }
       $this->destroy();
       UI\quit();
    }
};

$box = new Box(Box::Vertical);
$win->add($box);

$stars = new class($box) extends Area {

    protected function onKey(string $key, int $ext, int $flags) {
        if ($flags & Area::Down) {
            switch ($ext) {
                case Key::Right: 
                    if ($this->pos->x < WINWIDTH - MYSIZE) {
                        $this->pos->x += 10;
                        $this->redraw();
                    }
                    break;

                case Key::Left:                 
                    if ($this->pos->x > 0) {
                        $this->pos->x -= 10;
                        $this->redraw();
                    }
                    break;

                case Key::Down:                   
                    if ($this->pos->y < WINHEIGHT - MYSIZE) {
                        $this->pos->y += 10;
                        $this->redraw();
                    }
                    break;

                case Key::Up:                    
                    if ($this->pos->y > 0) {
                        $this->pos->y -= 10;
                        $this->redraw();
                    }
                    break;
            }
        }
    }

    protected function onDraw(UI\Draw\Pen $pen, UI\Size $size, UI\Point $clip, UI\Size $clipSize) {
        $hSize = $size / 2;

        $path = new Path();
        $path->addRectangle(Point::at(0), $size);
        $path->end();
        $pen->fill($path, 0x000000FF);

        $path = new Path();
        $pos = $this->pos;
        $path->addRectangle($pos, new Size(MYSIZE, MYSIZE));
        $path->end();
        $color = new Color();
        $color->r = 255;
        $color->g = 0;
        $color->b = 0;
        $pen->fill($path, $color);
    }

    public function __construct($box) {
        $this->box = $box;
        $this->pos = $pos = new Point(0,0);

        $this->box->append($this, true);
    }
};

$animator = new class($stars) extends Executor {

    protected function onExecute() {
        $this->area->redraw();
    }

    public function __construct(Area $area) {
        $this->area = $area;
        parent::__construct();
    }
};

$win->addExecutor($animator);

$win->show();

UI\run();

运行结果如下截图所示,可通过键盘的上下左右来控制红色方块的移动。

文章评分2次,平均分5.0

本文原始地址:https://www.tiandiyoyo.com/2018/03/new-to-php7-ui/
本站所有文章,除了特别注明外,均为本站原创,转载请注明出处来自www.tiandiyoyo.com

您可能还会对以下文章感兴趣:

评论前先开启评论开关:


4 Comments

  1. 感谢楼主的分享,学习。

  2. 麦葱 :

    what! PHP 玩 UI 了?

载入分页评论...