平滑跳过不同的FPS

时间:2015-08-29 10:38:29

标签: python animation pygame game-physics

我创造了一款游戏,但是我在控制玩家跳跃方面遇到了问题。此代码是仅显示跳转问题的简化版本。请记住,在游戏本身中,FPS可能会在跳跃中有所不同。我已经将跳转代码分开,因此它更容易识别,并且使用向上/向下箭头可以更改FPS以进行测试。

问题

FPS越高,跳跃越小,FPS越低,跳跃越高。

预期结果

跳跃在许多不同的FPS上达到相同的高度。示例:30和120 FPS

代码

import socket
import sys
import select
import threading

SERVER_IP = '192.168.1.4'
PORT = 8686
TIMEOUT = 5
BUF_SIZE = 1024
MESSAGES = ['testdata1', 'testdata2']

class Client(threading.Thread):

    def __init__(self, host=SERVER_IP, port=PORT):
        threading.Thread.__init__(self)
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock = socket.create_connection((host, port), 1)
        self.sock.setblocking(0)
        while 1:
            try:
                global MESSAGES
                ready = select.select([self.sock], [], [], TIMEOUT*1000)
                if ready[0]:
                    buf = self.sock.recv(BUF_SIZE)
                    print buf
                    #TODO:do stuff with buf

                    print 'messages left:'+str(len(MESSAGES))
                    if len(MESSAGES)>0:
                        self.sock.send(MESSAGES.pop())
            except KeyboardInterrupt:
                self.sock.close()
                sys.exit(1)
            except Exception, e:
                print '\n[ERR] %s' % e
                self.sock.close()
                sys.exit(1)

    def run(self):
        pass

    def sendData(self, data):
        global MESSAGES
        print 'appending data:%s' % data
        MESSAGES.append(data)

def main():
    client = Client()
    client.start()
    client.sendData("test1")
    client.sendData("test2")
    client.sendData("test3")

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        sys.exit(1)

1 个答案:

答案 0 :(得分:1)

您应将初始跳跃速度设置为与帧速率无关,即:

Move = 480

请注意,当您更新速度(或在您的情况下,它看起来,速度)时,您需要除以帧速率,因为您基本上乘以时间间隔:v ~ u + a*dt。更新职位时同样适用,因此应为Y += Move / Current_FPS

还有其他一些值得一提的事情。为什么要跟踪方向变量?为什么不让变量Move成为速度。这样你只需要:Y += Move / Current_FPS并且正/负值表示方向。此外,你的引力目前在下降的过程中比在上升时强很多,但这可能完全是故意的!