سؤال

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

هل يجب أن أذهب نحو إضافة (وإزالة) قطع الرؤية إلى تخطيط خطي؟ سيكون من الرائع سماع الخبرات الموجودة فيما يتعلق برسم هذا النوع من التحكم المخصص لفترة طويلة.

شكرا /إريك

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

المحلول

إذا كنت تعمل مع قائمة/شبكة أو أي شيء يستخدم محولًا للبيانات ، فيمكنك استخدام فئة ممتازة أكثر من قبل Commonsware ومتاحة هنا:

http://github.com/commonsguy/cwac-endless

كان ذلك على وجه التحديد لهذا الغرض

نصائح أخرى

استخدم عازلة خارج الشاشة حجم سيطرتك.

في البداية افعل ذلك بالطريقة البسيطة. ارسم التمرير بالكامل خارج الشدة إلى الموضع الصحيح. عندما يكون جاهزًا للضرب على الشاشة الفعلية.

إذا كان هذا بطيئًا للغاية ، فحاول تحسينه من خلال عدم إعادة رسم كامل خارج الشدة ولكن عن طريق الانقسام الرأسي: (أنا أتحدث فقط عن حركة التمرير الأفقية هنا في الوقت الحالي لتسهيل فهم المفهوم. لكن هذه الطريقة تنطبق على 8 طريقة التمرير كذلك)

هذا أمر صعب إلى حد ما للتنفيذ (ولهذا السبب اقترحت النهج البسيط أولاً) ، لكن حاول أن تتخيل ورقة بها صورة عليها ، والجانب الأيسر الذي تلتف حوله وتلصقه على الجانب الأيمن (حتى تحصل على أنبوب). وبهذه الطريقة يمكنك تمرير الورق إلى أجل غير مسمى (عن طريق تدوير الأنبوب حول محوره).

وبالمثل ، يمكنك أن تفعل الشيء نفسه مع المخزن المؤقت خارج الشاشة.

الآن للتمرير إلى اليمين ، يمكنك تقسيم المخزن المؤقت خارج الشاشة بشكل أساسي في 2 (عن طريق هذا الانقسام الرأسي (تمامًا مثل الورقة في المثال الذي كان الغراء)). لنفترض أنك تمرير 10 بكسل إلى اليمين ، ما تفعله هو:

  • انسخ الجانب الأيمن من الانقسام (الموجود في Pixel 10) إلى Pixel 0 من سيطرتك. (إذن المنطقة بأكملها من (10 ، 0) - (العرض - الارتفاع) إلى: (0،0)
  • ثم انسخ الجانب الأيسر من الانقسام: Pixel من 0 إلى 10 إلى Pixel Width-10. لذلك: (0،0)-(10 ، ارتفاع) إلى (العرض -10 ، 0)

قبل القيام بذلك ، إعادة رسم البيكسلات التي تم تغييرها (في هذه الحالة 10 بكسل منذ أن قمنا بالتمرير 10 بكسل). جميع وحدات البكسل الأخرى لا تزال متطابقة ولا تحتاج إلى إعادة رسم.

سيكون عليك رسم هذا على ورقة بنفسك لفهمها حقًا. إنها تقنية شائعة جدًا مع تطوير اللعبة على المنصات حيث تكون الموارد محدودة (الهواتف المحمولة وما إلى ذلك).

يمكن تحقيق التمرير في جميع الاتجاهات بالطريقة نفسها بالضبط (على الرغم من أنه من الصعب الحصول على صواب) ؛^)

متأخراً قليلاً عن الحفلة ، لكنني اعتقدت أنني سأريكم طريقة أبسط بكثير للذهاب: تحتاج فقط عرض وتجاوز Ondraw):

 private void drawEndlessBackground(Canvas canvas, float left, float top) {

    float modLeft = left % screenWidth;

    canvas.drawBitmap(backgroundImage, modLeft, top, null);

    if (left < 0) {

        canvas.drawBitmap(backgroundImage, modLeft + screenWidth, top, null);

    } else {

        canvas.drawBitmap(backgroundImage, modLeft - screenWidth, top, null);

    }



}

ماذا عن XML؟ private void drawendbackground (قماش قماش ، عائم يسار ، قمة تعويم) {

float modLeft = left % screenWidth;

canvas.drawBitmap(backgroundImage, modLeft, top, null);

if (left < 0) {

    canvas.drawBitmap(backgroundImage, modLeft + screenWidth, top, null);

} else {

    canvas.drawBitmap(backgroundImage, modLeft - screenWidth, top, null);

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