الطريقة الصحيحة لقياس سطح SDL بدون قطة؟

StackOverflow https://stackoverflow.com/questions/328500

  •  11-07-2019
  •  | 
  •  

سؤال

ما هي الطريقة الصحيحة لقياس سطح SDL؟ لقد وجدت تفسيرا واحدا على الانترنت ولكن ذلك يتطلب إعادة رسم بكسل السطح بكسل. يبدو وكأنه يجب أن يكون هناك طريقة للقيام بذلك أصلا من خلال SDL بدلا من إعادة رسم صورة من هذا القبيل. لم أكن قادرا على العثور على أي شيء في وثائق SDL التي تغطي هذا. وأنا قادرة على تغيير حجم الأسطح دون أي مشكلة عن طريق تعديل عرض الأسطح والارتفاع، ولكن يتم قص السطح الناتجة عن ذلك.

هل كانت مفيدة؟

المحلول

وSDL لا يدعم blitting تحجيمها. ووفقا لتوثيق SDL_BlitSurface :

<اقتباس فقرة>   

ملحوظة: لblitter SDL لا (حتى الآن)   لديها القدرة على التوسع في   blitted السطوح أعلى أو لأسفل كما هي   الحال مع البعض أكثر تطورا   blitting الآليات. عليك أن   الرقم شيئا لنفسك إذا   تريد حجم الصور (استخدام مثل   SDL_gfx).

هل يمكن أن تجد SDL_gfx هنا . كتابة وظيفة blitting الخاصة بك ليست سيئة، وأنه قد يكون متعة وفائدة تجربة التعلم (وإن كنت تريد ان تكون إعادة اختراع العجلة). باستخدام برنامج OpenGL هو أيضا خيار، وأشياء من هذا القبيل التوسع، ويمكن أن يتم ذلك في مكالمة ظيفة واحدة بالتناوب.

نصائح أخرى

وأنا أعلم أن هذا الجواب هو الطريق بعد فوات الأوان لمساعدة الشخص الذي يطلب منه، لكنني قررت أن أكتب هذا لمساعدة أي شخص يعثر على هذا السؤال. في SDL 2.0 يمكنك استخدام وظيفة SDL_BlitScaled() لتوسيع نطاق سطح إلى SDL_Rect المستهدفة. هناك البرنامج التعليمي LazyFoo حيث يصف هذا، أو تحقق من هذا <أ href ل = "https://wiki.libsdl.org/SDL_BlitScaled" يختلط = "نوفولو noreferrer"> وثائق .

لاكتمال، ولأن السؤال لا يحدد نسخة SDL، والقياس هو ممكن في SDL2 باستخدام SDL_RenderCopyEx طريقة API. ليست هناك حاجة ليبس إضافية إلى جانب ليب SDL2 الأساسي.

int SDL_RenderCopyEx(SDL_Renderer*          renderer,
                     SDL_Texture*           texture,
                     const SDL_Rect*        srcrect,
                     const SDL_Rect*        dstrect,
                     const double           angle,
                     const SDL_Point*       center,
                     const SDL_RendererFlip flip)

ومن خلال تحديد حجم dstrect يمكن للمرء أن حجم نسيج لعدد صحيح من وحدات البكسل. ومن الممكن أيضا لتدوير والوجه والملمس في الوقت نفسه.

ومن الناحية الفنية لم يكن هذا التوسع سطح بل رفع الملمس. يجب أن تكون الإجراءات ذات الصلة كما لو كما الأسطح يتم تحويل دائما تقريبا إلى القوام قبل وقوع التقديم في التطبيقات المستندة إلى SDL2.

والمرجعي: https://wiki.libsdl.org/SDL_RenderCopyEx

إنشاء القوام كالمعتاد:

surface = IMG_Load(filePath);
texture = SDL_CreateTextureFromSurface(renderer, surface);

وعندما حان الوقت لجعله، والدعوة SDL_RenderCopyEx بدلا من SDL_RenderCopy

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top