2016-07-21 1 views
1

Im actuellement construire le jeu fps-comme pour l'environnement android.Pixel contre Percentige au mobile env

J'ai remarqué que si je fais des objets avec l'utilisation de pixels, les appareils à faible résolution peuvent jouer au jeu si facilement que les téléphones à haute résolution.

Si j'utilise le pourcentage pour les objets de construction, cette fois, les périphériques plus grands prennent l'avantage. Tels que les tablettes ont une grande taille que les téléphones et ils peuvent tirer mon objet facilement.

Je veux que mes objets soient exactement de la même taille sur tous les appareils est-ce possible?

Plus specificly J'utilise python-Kivy est-il possible de définir comme objet cm/ft ou etc. Vous

Répondre

2

pouvez faire une méthode relative_size et relative_position. Et faites-les par rapport à la largeur ou la hauteur des fenêtres. Vous obtenez la taille de la fenêtre de la classe Window. Rappelez-vous seulement de faire la taille des objets (w, h) par rapport à seulement un de largeur ou de hauteur. Ou vos objets seront déformés.

from kivy.uix.widget import Widget 
from kivy.graphics import Canvas,InstructionGroup,Color,Ellipse 
from kivy.core.window import Window 
from kivy.app import App 


class MyCanvas(Widget): 

    def __init__(self,**kwargs): 
     super(MyCanvas,self).__init__(**kwargs) 
     #Window.size = (200,100) 

     self.size = Window.size 

     self.orientation = "vertical" 

     self.ball = InstructionGroup() 

     self.ball_size = self.relative_size(10,10) 

     self.color = Color(0, 1, 1) 
     self.ellipse = Ellipse(size=self.ball_size,pos=self.relative_position(100,50,self.ball_size)) 

     self.ball.add(self.color) 
     self.ball.add(self.ellipse) 

     self.canvas.add(self.ball) 


    def relative_position(self,x,y,obj_size=(0,0)): # pass obj_size if you want the position to be the center of the object11 
     x = (self.width/100.0) * x - obj_size[0]/2.0 
     y = (self.height/100.0) * y - obj_size[1]/2-.0 
     return (x,y) 


    def relative_size(self,w,h): 
     return (self.width/float(w),self.width/float(h)) # only make it relative to your width or heigh 
                 # or your object will be warped 


class MyApp(App): 
    def build(self): 
     return MyCanvas() 

if __name__ == "__main__": 
    MyApp().run() 

La méthode relative_position va maintenant être un avantage. Donc vous passez de 0 à 100 dans les deux sens. Si vous voulez quelque chose d'autre, changez les 100 dans la méthode. Essayez de décommenter le #Window.size = (200,100) et jouer avec la taille de la fenêtre, et voir comment cela fonctionne. Vous pouvez également créer un événement si votre application change de taille, par exemple si votre téléphone change d'orientation. Comme je ne l'ai pas fait, cela ne fonctionnera qu'avec la taille de l'application.