2013-09-26 5 views
0

Je suis en train de construire un jeu à 2 joueurs et pour l'instant la position du défilement est déterminée par le point central des positions à 2 caractères. Mais j'ai un problème. Lorsque les personnages s'éloignent l'un de l'autre, la position de défilement de l'écran se trouve au milieu de ces caractères et personne n'est visible parce qu'ils ont quitté la vue. Donc je cherche un algorithme pour déterminer l'échelle que le monde devrait avoir pour que les personnages soient visibles.Un algorithme de mise à l'échelle du monde du jeu en fonction de la position du personnage

Votre temps est évalué.

Répondre

1

En supposant que votre écran (ou fenêtre) est de taille fixe, (Screen_Width, Screen_Height).

Maintenant vous calculez les distances X et Y entre les deux joueurs.

xdist = abs(Player2.x - Player1.x); 
ydist = abs(Player2.y - Player1.y); 

Calculer les x et les facteurs d'échelle y:

xscale = Screen_Width/xdist; 
yscale = Screen_Height/ydist; 

Et prendre la plus petite valeur.

scale = min(xscale, yscale); 

Maintenant, si scale >= 1, puis les joueurs s'adaptera à l'écran. Vous n'avez pas à faire de mise à l'échelle. Vous pouvez simplement trouver le point milieu et dessiner. Si scale < 1, alors vous devez mettre à l'échelle toutes vos coordonnées par scale

1

Sans avoir aucune information sur le type d'unités, IDE, ou la langue que vous utilisez ici est une solution possible:

function object calcScale(screen, player1, player2, midpoint): 
    width = abs(player1.x-player2.x) 
    height = abs(player1.y-player2.y) 
    width = max(width,height) 
    height = width 
    x = min(player1.x, player2.x, midpoint.x-width/2) 
    y = max(player1.y, player2.y, midpoint.y+height/2) 
    s = (screen.width*screen.height)/(width*height) 

    newscreen= {startx:x, starty:y, scale:s} 

    return newscreen 

Cela suppose une fenêtre carrée avec les joueurs centrés à tout moment.

Questions connexes