Pixi.js: لاعب يتبع الكاميرا

تم إنشاؤها على ٢٩ أبريل ٢٠١٧  ·  8تعليقات  ·  مصدر: pixijs/pixi.js

إذن ، ما هي الطريقة الأكثر فاعلية للقيام بذلك باستخدام Pixi؟ أريد

  1. الكاميرا بشكل أساسي لمتابعة اللاعب وتغيير الخلفية وفقًا لموقف اللاعب
  2. قم بالتمرير إلى العالم فقط إذا كان المشغل على سبيل المثال 400 بكسل من الطرف الأيمن للقماش و 300 بكسل من الطرف الأيسر للقماش
  3. أشياء مثل الأعداء والأشياء على الأرض والأشياء تتكيف وفقًا لذلك (تتكيف مع المشهد أيضًا).

شكرا مقدما

🤔 Question

التعليق الأكثر فائدة

شخص ما ، من فضلك اجعل هذا مقال pixi wiki. أعتقد أنني أشرح هذا الشيء للمرة العاشرة ، نحتاج إلى برنامج تعليمي حول هذه الأشياء

ال 8 كومينتر

اصنع حاوية "الكاميرا" ، ضع كل شيء هناك.

camera.position.set(renderer.screen.width/2, renderer.screen.height/2);
camera.pivot.copy(player.position);

//EVERY FRAME

var targetPivot = player.position;

//LERP IT, dt is something between 0 and 1.
// i use dt = 1 - Math.exp(-deltaInMillis / 100);
// or you can just assign targetpivot to pivot
camera.pivot.x = (targetPivot.x - camera.pivot.x) * dt + camera.pivot.x;
camera.pivot.y = (targetPivot.y - camera.pivot.y) * dt + camera.pivot.y;

//big square

var mapRect = new PIXI.Rectangle();
mapRect.x = camera.pivot.x - renderer.screen.width/2;
mapRect.y = camera.pivot.x - renderer.screen.height/2;
mapRect.width  = renderer.screen.width;
mapRect.height = renderer.screen.height;
mapRect.pad(400,400); // -this line was updated

//every time camera changes position


var newRect = new PIXI.Rectangle();
newRect .x = camera.pivot.x - renderer.screen.width/2;
newRect .y = camera.pivot.x - renderer.screen.height/2;
newRect .width  = renderer.screen.width;
newRect .height = renderer.screen.height;
if (newRect.x < mapRect.x || newRect.right > mapRect.right ||
   newRect.y < mapRect.y ||  newRect.bottom > mapRect.bottom) {
   mapRect = newRect;
   //ADJUST THE BACKGROUND AND STUFF
   //CLEAR AND FILL THE TILEMAP: https://github.com/pixijs/pixi-tilemap
}

شخص ما ، من فضلك اجعل هذا مقال pixi wiki. أعتقد أنني أشرح هذا الشيء للمرة العاشرة ، نحتاج إلى برنامج تعليمي حول هذه الأشياء

شكرا جزيلا. إنه يقوم بالمهمة ولكني لست قادرًا على تحقيق 2. نقطة. نتيجة mapRect.enlarge (400) ؛ هو NaN. وفقًا للوثائق من المفترض أن يكون هناك مستطيل آخر.
إذا كان بإمكانك شرحها بمزيد من التفصيل ، فسيكون ذلك رائعًا.
شكرا جزيلا.

حسنًا ، استخدم "pad (400،400)" "بدلاً من ذلك ؛)

يبدو أنه لا تزال هناك مشكلة لأنه في كل إطار سيكون newRect.x دائمًا أكبر. أفتقد شيئًا ضخمًا هنا على ما أعتقد :(

تضمين التغريدة

mapRect = newRect;
mapRect.pad(400,400);

تأكد أيضًا من إنشاء newRect في كل مرة. إذا لم تقم بذلك ، فيرجى استخدام "mapRect.copy (newRect)؛" بدلا من الاحالة.

لقد كتبت رمزًا زائفًا. أتمنى أن تقوم بنسخ هذه الأشياء إلى وظائف مختلفة مثل gameStart أو gameFrame أو نحو ذلك؟ ليس من المفترض أن يكون في وظيفة واحدة.

مرحبا! إغلاق هذه القضية في الوقت الحالي بسبب عدم نشاطها. لا تتردد في إرسال كزة إلينا إذا كنت ترغب في إعادة فتح هذه المشكلة. شكرا 👍

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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات