السلام عليكم. سأفترض أنك قرأت هذا الموضوع وفهمته . http://www.arabteam2...howtopic=100514 الفكرة من sprite .. هي بأن نحمل صورة كبيرة نوعا ما .. ثم نلتقط اجزاء من تلك الصورة ونعرضها , مثلا .. لديك هذه الصورة .. اذا اردت اظهار كل الصورة .. فان هذا الامر معروف . لكن لو أردت أن تظهر جزء من الصورة .. مثلا تريد في الثانية الاولى تريد اظهار الرقم واحد . الثانية الثانية تريد اظهار الرقم اثنين .. وهكذا . حتى تصل لنهاية الصورة ( الرقم اربعة ) . الفكرة بشكل عام كالتالي : نستخدم امر رسم الصورة .. ولكن لا نرسم الصورة كاملة .. بل جزء منها , مثلا هذه الصورة . عرضها 256 بكسل وطولها 64 بكسل . مقسمة بالشكل التالي : في الاحداثي السيني : من البكسل رقم صفر .. الى البكسل رقم 64 هذا يمثل الفريم الاول . من البكسل رقم 64 الى 128 الفريم الثاني . من البكسل 128 الى 192 الفريم الثالث . من البكسل 192 الى 256 الفريم الرابع . فنحن نكتب شيئا شبيه بالتالي .
Draw_Image ( 64 ,128, "image.bmp" );
SDL_Rect screen_rect;
image_rect.x=64;/////// لاحظ image_rect.y=0; image_rect.w=64 ;/////// لاحظ image_rect.h=64 ;
static int x1=0; bool is_up=true; ... while(isRunning == true) { SDL_Event event; SDL_PollEvent(&event); if (event.type == SDL_QUIT) isRunning = false; if(event.type == SDL_KEYDOWN) { switch(event.key.keysym.sym ) { case SDLK_RIGHT: { if(is_up==true) { // نتأكد من اننا وصلنا لنهاية الصورة if(x1>=192 ){x1=0; } else { x1+=64; } is_up=false; } }//right case SDLK_LEFT: { } } }//key down if(event.type == SDL_KEYUP) { is_up = true; } else { //نحدد المنطقة التي نريد عرضها من الصورة .. ونحن حددنا كل الصورة image_rect.x=x1; image_rect.y=0; image_rect.w=64 ; // x1+ 46 image_rect.h=64 ; //أين نريد وضع الصورة ... نختار الموقع الذي نريد بالنسبة للشاشة screen_rect.x=0; screen_rect.y=0; SDL_BlitSurface(image, &image_rect, screen, &screen_rect); //نعرض الصورة SDL_Flip(screen); } }//while
if(x1>=192 ){x1=0; }