我目前正在为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)
的注释,并使用窗口大小,看看它是如何工作的。如果你的应用程序改变了大小,比如你的手机改变了方向,你也可以举办一个活动。由于我没有这样做,这只适用于应用程序启动时的大小。