像素与移动环境下的百分比



我目前正在为android环境构建类似fps的游戏。

我注意到,如果我用像素制作物体,低分辨率设备可以比高分辨率手机更容易地玩游戏。

如果我这次使用百分比来构建对象,那么更大的设备将获得优势。比如平板电脑的尺寸比手机大,它们可以很好地拍摄我的物体。

我希望每个设备上的对象大小完全相同,这可能吗?

更具体地说,我使用python-kivy是否可以将对象定义为cm/ft等。

您可以创建relative_size和relative_position方法。并使它们相对于窗口的宽度或高度。您可以从window类中获得窗口的大小。记住,仅使对象的大小(w,h)相对于宽度或高度中的一个。否则你的物体会变形。

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

这里的relative_position方法现在将是percantage。所以你从0-100两个方向通过。如果你想要其他东西,请更改tht方法中的100。尝试取消对#Window.size = (200,100)的注释,并使用窗口大小,看看它是如何工作的。如果你的应用程序改变了大小,比如你的手机改变了方向,你也可以举办一个活动。由于我没有这样做,这只适用于应用程序启动时的大小。

最新更新