Pixi.js: Lecteur de suivi de caméra

Créé le 29 avr. 2017  ·  8Commentaires  ·  Source: pixijs/pixi.js

Alors, quelle est la manière la plus efficace de faire cela avec Pixi? Je voudrais

  1. caméra essentiellement pour suivre un joueur et changer l'arrière-plan en fonction de la position du joueur
  2. faire défiler le monde uniquement si le joueur est par exemple à 400 px de l'extrémité droite du canevas et 300 px de l'extrémité gauche du canevas
  3. des choses comme les ennemis, les choses au sol et les objets s'adaptent en conséquence (s'adaptent également au paysage).

Merci d'avance

🤔 Question

Commentaire le plus utile

Quelqu'un, s'il vous plaît en faire un article wiki pixi. Je pense que j'explique ce truc pour la 10e fois, nous avons besoin d'un tutoriel sur ce truc

Tous les 8 commentaires

faire un conteneur "Camera", tout y mettre.

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
}

Quelqu'un, s'il vous plaît en faire un article wiki pixi. Je pense que j'explique ce truc pour la 10e fois, nous avons besoin d'un tutoriel sur ce truc

Merci. Il fait le travail mais je ne suis pas en mesure d'accomplir 2. point. Le résultat de mapRect.enlarge (400); est NaN. Selon la documentation, il devrait y avoir un autre rectangle.
Si vous pouviez simplement l'expliquer un peu plus en détail, ce serait formidable.
Merci.

OK, utilisez plutôt "pad (400,400)" ";)

Il semble toujours y avoir le problème car dans chaque cadre, newRect.x sera toujours plus grand. Il me manque quelque chose d'énorme ici, je suppose :(

@mirosssc

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

assurez-vous également de créer newRect à chaque fois. Si vous ne le faites pas, veuillez utiliser "mapRect.copy (newRect);" au lieu de cession.

J'ai écrit un pseudo-code. J'espère que vous avez copié ce truc dans différentes fonctions comme gameStart, gameFrame ou autre? Ce n'est pas censé être dans une fonction.

Salut! Clôture de ce problème pour l'instant en raison de son inactivité. N'hésitez pas à nous donner un coup de pouce si vous souhaitez que ce numéro soit rouvert. Merci 👍

Ce thread a été automatiquement verrouillé car il n'y a eu aucune activité récente après sa fermeture. Veuillez ouvrir un nouveau numéro pour les bogues associés.

Cette page vous a été utile?
0 / 5 - 0 notes