76 lines
2.3 KiB
ActionScript

package spine.examples {
import starling.animation.IAnimatable;
import starling.textures.Texture;
import flash.display.BitmapData;
import flash.geom.Point;
import spine.starling.SkeletonMesh;
import starling.display.DisplayObject;
import starling.rendering.IndexData;
import starling.rendering.Painter;
import starling.utils.Color;
public class Shape extends DisplayObject implements IAnimatable {
private var r: Number = 1, g: Number = 1, b: Number = 1, a: Number = 1;
private var mesh: SkeletonMesh;
private var vertices: Vector.<Number>;
public function Shape() {
var bitmapData: BitmapData = new BitmapData(16, 16, false, 0xffffffff);
mesh = new SkeletonMesh(Texture.fromBitmapData(bitmapData));
setVertices(new <Number>[0, 0, 100, 0, 100, 100, 0, 100]);
setColor(1, 0, 0, 1);
}
public function setVertices(vertices: Vector.<Number>): void {
this.vertices = vertices;
}
public function setColor(r: Number, g: Number, b: Number, a: Number): void {
this.r = r;
this.g = g;
this.b = b;
this.a = a;
}
override public function render(painter : Painter) : void {
var indices: IndexData = mesh.getIndexData();
var idx: int = 0;
var x:Number = vertices[0], y:Number = vertices[1];
for (var i:int = 2; i < vertices.length - 2; i+=2) {
var x2:Number = vertices[i], y2:Number = vertices[i+1];
var x3:Number = vertices[i+2], y3:Number = vertices[i+3];
indices.setIndex(idx, idx);
indices.setIndex(idx+1, idx+1);
indices.setIndex(idx+2, idx+2);
mesh.setVertexPosition(idx, x, y);
mesh.setTexCoords(idx++, 0, 0);
mesh.setVertexPosition(idx, x2, y2);
mesh.setTexCoords(idx++, 0, 0);
mesh.setVertexPosition(idx, x3, y3);
mesh.setTexCoords(idx++, 0, 0);
}
indices.numIndices = idx;
indices.trim();
mesh.getVertexData().numVertices = idx;
var rgb: uint = Color.rgb(r * 255, g * 255, b * 255);
var alpha: uint = a * 255;
mesh.getVertexData().colorize("color", 0xffffffff, 0xff);
mesh.setVertexDataChanged();
mesh.setIndexDataChanged();
painter.batchMesh(mesh);
}
public function advanceTime(time : Number) : void {
this.setRequiresRedraw();
}
override public function hitTest(localPoint : Point) : DisplayObject {
return null;
}
}
}