ওপেনজিএল ইএস-তে স্প্রিট অ্যানিমেশন প্রয়োগ করার ক্ষেত্রে আমি সমস্যার মুখোমুখি। আমি এটি গুগল করেছি এবং আমি যা পাচ্ছি তা হ'ল ক্যানভাসের মাধ্যমে টিউটোরিয়াল বাস্তবায়ন।
আমি উপায়টি জানি তবে এটি বাস্তবায়নে আমার সমস্যা হচ্ছে।
আমার যা প্রয়োজন: সংঘর্ষ শনাক্তকরণের জন্য একটি স্প্রিট অ্যানিমেশন।
আমি যা করেছি: সংঘটন সনাক্তকরণ ফাংশন সঠিকভাবে কাজ করছে।
PS: সবকিছু ঠিকঠাক চলছে তবে আমি কেবল ওপেনজিএল এ অ্যানিমেশনটি প্রয়োগ করতে চাই। ক্যানভাস আমার ক্ষেত্রে কাজ করবে না।
------------------------ সম্পাদনা -----------------------
আমার এখন একটি স্প্রিট শীট রয়েছে, নীচের অংশে কিছু নির্দিষ্ট সমন্বয় রয়েছে বলে বলুন তবে কোথা থেকে (ইউ, ভি) সমন্বয় শুরু হবে? আমার ইউ, ভি কো-অর্ডিনেটস (0,0) বা (0,5) এর থেকে বিবেচনা করা উচিত এবং কোন তালিকাতে সেগুলি আমার তালিকায় সংরক্ষণ করা উচিত ..? ----> বাম থেকে ডানে OR ----> উপরে থেকে নীচে
আমার স্প্রাইটস ক্লাসে আমার কি 2 ডি অ্যারে থাকা দরকার? আরও ভাল বোঝার জন্য এখানে চিত্রটি।
আমি ধরে নিচ্ছি যে আমার কাছে একটি এনএক্সএন স্প্রাইট শীট রয়েছে, যেখানে এন = 3,4,5,6, .... ইত্যাদি রয়েছে।
।
।
class FragileSquare{
FloatBuffer fVertexBuffer, mTextureBuffer;
ByteBuffer mColorBuff;
ByteBuffer mIndexBuff;
int[] textures = new int[1];
public boolean beingHitFromBall = false;
int numberSprites = 49;
int columnInt = 7; //number of columns as int
float columnFloat = 7.0f; //number of columns as float
float rowFloat = 7.0f;
public FragileSquare() {
// TODO Auto-generated constructor stub
float vertices [] = {-1.0f,1.0f, //byte index 0
1.0f, 1.0f, //byte index 1
//byte index 2
-1.0f, -1.0f,
1.0f,-1.0f}; //byte index 3
float textureCoord[] = {
0.0f,0.0f,
0.142f,0.0f,
0.0f,0.142f,
0.142f,0.142f
};
byte indices[] = {0, 1, 2,
1, 2, 3 };
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(4*2 * 4); // 4 vertices, 2 co-ordinates(x,y) 4 for converting in float
byteBuffer.order(ByteOrder.nativeOrder());
fVertexBuffer = byteBuffer.asFloatBuffer();
fVertexBuffer.put(vertices);
fVertexBuffer.position(0);
ByteBuffer byteBuffer2 = ByteBuffer.allocateDirect(textureCoord.length * 4);
byteBuffer2.order(ByteOrder.nativeOrder());
mTextureBuffer = byteBuffer2.asFloatBuffer();
mTextureBuffer.put(textureCoord);
mTextureBuffer.position(0);
}
public void draw(GL10 gl){
gl.glFrontFace(GL11.GL_CW);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(1,GL10.GL_FLOAT, 0, fVertexBuffer);
gl.glEnable(GL10.GL_TEXTURE_2D);
int idx = (int) ((System.currentTimeMillis()%(200*4))/200);
gl.glMatrixMode(GL10.GL_TEXTURE);
gl.glTranslatef((idx%columnInt)/columnFloat, (idx/columnInt)/rowFloat, 0);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); //4
gl.glTexCoordPointer(2, GL10.GL_FLOAT,0, mTextureBuffer); //5
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); //7
gl.glFrontFace(GL11.GL_CCW);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glMatrixMode(GL10.GL_TEXTURE);
gl.glLoadIdentity();
gl.glMatrixMode(GL10.GL_MODELVIEW);
}
public void loadFragileTexture(GL10 gl, Context context, int resource)
{
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resource);
gl.glGenTextures(1, textures, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();
}
}