使用图片纹理是制作精灵最有效的方式之一,但是Pixi也提供了自己低级的绘画工具。你可以使用它们来创造矩形、线段、复杂的多边形以及文本。并且它使用和几乎一致的api,所以如果你熟悉canvas的话,那么几乎没有什么新东西需要学习。当然另一个巨大的优势在于,不同于Canvas的绘画api,你使用Pixi绘制的图形是通过WebGL在GPU上渲染的。Pixi能够让你获得所有未触碰到的性能。让我们简单看一下如何创造一些基本图形。下面是我们将要使用前面代码来创造的图形。

    所有的形状的初始化都是先创造一个Pixi的的类 (PIXI.Graphics)的实例。

    调用beginFill和一个16进制的颜色值来设置矩形的填充颜色。下面展示如何设置颜色为淡蓝色。

    1. rectangle.beginFill(0x66CCFF);

    如果你想要给图形设置一个轮廓,使用lineStyle方法。下面展示如何给矩形设置一个4像素宽alpha值为1的红色轮廓

    1. rectangle.lineStyle(4, 0xFF3300, 1);

    调用drawRect方法来画一个矩形。它的四个参数是x, y, widthheight

    1. rectangle.drawRect(x, y, width, height);
    1. rectangle.endFill();

    它看起来就像Canvas的绘画api一样!下面是绘制一个矩形涉及到的所有代码,调整它的位置并且把它添加到舞台吧。

    这些代码可以在(170,170)这个位置创造一个宽高都为64的蓝色的红框矩形。

    圆形

    调用drawCircle方法来创造一个圆。它的三个参数是x, yradius

    1. drawCircle(x, y, radius)

    不同于矩形和精灵,一个圆形的x和y坐标也是它自身的圆点。下面展示如何创造半径32像素的紫色圆形。

    1. let circle = new Graphics();
    2. circle.beginFill(0x9966FF);
    3. circle.drawCircle(0, 0, 32);
    4. circle.endFill();
    5. circle.x = 64;
    6. circle.y = 130;
    7. app.stage.addChild(circle);

    drawEllipse是一个卓越的Canvas绘画api,Pixi也能够让你调用drawEllipse来绘制椭圆。

    1. drawEllipse(x, y, width, height);

    x/y坐标位置决定了椭圆的左上角(想象椭圆被一个不可见的矩形边界盒包围着-盒的左上角代表了椭圆x/y的锚点位置)。下面是50像素宽20像素高的黄色椭圆。

    1. let ellipse = new Graphics();
    2. ellipse.drawEllipse(0, 0, 50, 20);
    3. ellipse.x = 180;
    4. ellipse.y = 130;
    5. app.stage.addChild(ellipse);

    圆角矩形

    Pixi同样允许你调用drawRoundedRect方法来创建圆角矩形。这个方法的最后一个参数cornerRadius是单位为像素的数字,它代表矩形的圆角应该有多圆。

    下面展示如何创建一个圆角半径为10的圆角矩形。

    1. let roundBox = new Graphics();
    2. roundBox.lineStyle(4, 0x99CCFF, 1);
    3. roundBox.beginFill(0xFF9933);
    4. roundBox.drawRoundedRect(0, 0, 84, 36, 10)
    5. roundBox.endFill();
    6. roundBox.x = 48;
    7. roundBox.y = 190;
    8. app.stage.addChild(roundBox);

    想必你已经看过上面定义线段的lineStyle方法了。你可以调用moveTolineTo方法来画线段的起点和终点,就和Canvas绘画api中的一样。下面展示如何绘制一条4像素宽的白色对角线。

    1. let line = new Graphics();
    2. line.lineStyle(4, 0xFFFFFF, 1);
    3. line.moveTo(0, 0);
    4. line.lineTo(80, 50);
    5. line.x = 32;
    6. line.y = 32;
    7. app.stage.addChild(line);

    PIXI.Graphics对象,比如线段,都有xy值,就像精灵一样,所以你可以在绘制完它们之后将他们定位到舞台的任意位置。

    多边形

    你可以使用drawPolygon方法来将线段连接起来并且填充颜色来创造复杂图形。drawPolygon的参数是一个路径数组,数组中的值为决定图形上每个点位置的x/y坐标。

    1. point1X, point1Y,
    2. point2X, point2Y,
    3. point3X, point3Y
    4. graphicsObject.drawPolygon(path);
    1. let triangle = new Graphics();
    2. triangle.beginFill(0x66FF33);
    3. //Use `drawPolygon` to define the triangle as
    4. //a path array of x/y positions
    5. triangle.drawPolygon([
    6. -32, 64, //First point
    7. 32, 64, //Second point
    8. 0, 0 //Third point
    9. ]);
    10. //Fill shape's color
    11. triangle.endFill();
    12. //Position the triangle after you've drawn it.
    13. //The triangle's x/y position is anchored to its first point in the path
    14. triangle.x = 180;
    15. triangle.y = 22;