2017-06-18 1 views
0

J'ai pixels convertir mal à mètres sur mon jeupixels compteurs avancés

how many pixels is a meter in Box2D?

est un exemple de mon problème, mais ne résout pas. C'est parce que cette solution, même si elle fonctionne, ne va pas croiser le navigateur, c'est-à-dire que si le taux de conversion est constant de 50px à un mètre, les objets apparaîtront gros, alors que sur un autre appareil avec une résolution de 4000x8000 (exagérée), les objets seront minuscules. Je peux comprendre certaines solutions à cela, mais la principale raison pour laquelle je trouve cela si difficile à mettre en œuvre est parce qu'un navigateur ou un téléphone pourrait être un rapport de 16: 9, alors qu'un autre pourrait être 14: 7, et ces rapports différents sont le kicker, puisque mon jeu entier est tenu sur l'écran car ce n'est pas un jeu de défilement, c'est juste un simple jeu de physique. Pour cette raison, je comprends qu'il est plus facile d'avoir une taille plus petite, et de la convertir lors du rendu, mais ces problèmes que j'ai mentionnés m'ont bousculé, et je me promenais si quelqu'un avait des possibilités solutions.

Répondre

0

Depuis votre

jeu entier

est maintenu sur l'écran

Je vous suggère ce qui suit:

Décider combien de « mètres » dont vous avez besoin la largeur de votre fenêtre pour être. Disons que vous avez décidé:

toute la largeur de la fenêtre (W) est toujours N « mètres »

Alors k = W/Nk est un multiplicateur d'échelle qui signifie une partie de la largeur de fenêtre à l'intérieur 1 « mètre ». Par conséquent, si W = 400px et N = 100m vous avez k = 400px/100m = 4px/m. Et quand l'autre écran est W = 4000px vous avez k = 40px/m. De cette façon, vous pouvez convertir vos "mètres" en pixels en multipliant vos dimensions en "mètres" par k et vos objets seront toujours mis à l'échelle de la taille de l'écran.

En JavaScript il ressemble:

var N = 100; // window width in "meters" 
var k = window.innerWidth/N; // px in 1m 

// let's count something simple 
var U = 10; // speed in meters per second 
var t = 10; // time in seconds 
var S = U * t; // distance in meters 
var S_px = S * k; // distance in pixels (scaled to the window width)