2016-07-21 19 views
1

Ich baue derzeit fps-ähnliches Spiel für Android-Umgebung.Pixel vs Perzentige bei Mobile env

Ich habe bemerkt, dass, wenn ich Objekt mit der Verwendung von Pixeln mit niedriger Auflösung Geräte können Spiel so einfach zu spielen, als High-Resolution-Handys.

Wenn ich diesmal prozentual Objekte baue, gewinnen größere Geräte Vorteile. Wie Tablets haben große Größe als Telefone und sie können mein Objekt leicht schießen.

Ich möchte meine Objekte exakt gleich groß auf jedem Gerät ist es möglich?

Mehr specificly verwende ich Python-Kivy ist es möglich, Objekt als cm/ft zu definieren oder usw.

Antwort

2

Sie können eine relative_size und relative_position Methode machen. Und machen Sie sie relativ zur Fensterbreite oder -höhe. Sie erhalten die Größe des Fensters aus der Window-Klasse. Denken Sie daran, nur die Objektgröße (w, h) relativ zu nur einer der Breite oder Höhe zu machen. Oder Ihre Objekte werden verzogen.

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() 

Die Relative_Position Methode wird jetzt ein Percentage sein. Sie gehen also von 0-100 in beide Richtungen. Wenn Sie etwas anderes wollen, ändern Sie die 100s in dieser Methode. Versuchen Sie, die #Window.size = (200,100) auskommentieren und spielen mit der Fenstergröße und sehen, wie es funktioniert. Sie können auch ein Ereignis erstellen, wenn Ihre Anwendung die Größe ändert, z. B. wenn das Telefon die Ausrichtung ändert. Da ich das nicht gemacht habe, funktioniert das nur für die Größe, mit der die Anwendung gestartet wurde.