我一直在开发一个需要创建图像破碎效果的安卓游戏。我正在使用 Cocos2dx 进行游戏开发。
我已经将要破碎的形状分成小三角形并将它们存储到一个数组中,因为它在 Cocos2dx 中,所以顶点数组是一个 CGPoint 数组。例如
CGPoint[] vertices;
vertices[1]={CGPoint.ccp(0,0),CGPoint.ccp(1,0),CGPoint.ccp(1,1)}
vertices[2]={CGPoint.ccp(1,0),CGPoint.ccp(0,1),CGPoint.ccp(1,1)}
....
vertices[numVertices]={CGPoint.ccp(1,0),CGPoint.ccp(0,1),CGPoint.ccp(1,1)}
画画的时候
我已经将顶点数组转换为这样的 FloatBuffer
ByteBuffer vbb = ByteBuffer.allocateDirect(4 * 2*3* numVertices);
vbb.order(ByteOrder.nativeOrder());
triVertices = vbb.asFloatBuffer();
在 onDraw() 方法中这里的 pt1,pt2,pt3 是 CGPoints
for(int i=0;i<numVertices;i++){
triVertices.put(vertices[i].pt1.x);
triVertices.put(vertices[i].pt1.y);
triVertices.put(vertices[i].pt2.x);
triVertices.put(vertices[i].pt2.y);
triVertices.put(vertices[i].pt2.x);
triVertices.put(vertices[i].pt2.y);
}
gl.glVertexPointer(2, GL10.GL_FLOAT, 0, triVertices);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, triTexCoords);
gl.glColorPointer(4, GL10.GL_UNSIGNED_BYTE, 0, colorBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, numVertices*3);
不幸的是,整个形状都没有被绘制出来。从某种意义上说,只有单个三角形被绘制出来。我的逻辑有什么问题吗?请帮助我。真的很紧急。
编辑
下面是我用来调用扩展 CCSprite的粉碎类ShatteredSprite.java的代码。
CCSprite newSprite= CCSprite.sprite("bg-hand1.jpg");
int piecesX = 20;
int piecesY = 20;
float speedVar = 0.5f;
float rotVar = 0.2f;
boolean radial = true;
ShatteredSprite shatter =ShatteredSprite.shatterWithSprite(newSprite,
piecesX,
piecesY,
speedVar,
rotVar,
radial);
shatter.setAnchorPoint(CGPoint.make(0, 0));
shatter.setPosition(CGPoint.ccp(100, 150));
this.addChild(shatter, 1, 99);
现在破碎正在发生,但效果显示在右上角,所以只有一部分药水是可见的。如何使它正确。有任何想法。提前致谢。