返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用Python在游戏中模拟引力
  • 163
分享到

怎么用Python在游戏中模拟引力

2023-06-16 16:06:37 163人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容介绍了“怎么用python在游戏中模拟引力”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!添加一个引力函数记住你的玩家已经有了一个决定

本篇内容介绍了“怎么用python在游戏中模拟引力”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

添加一个引力函数

记住你的玩家已经有了一个决定动作的属性。使用这个属性来将玩家精灵拉向屏幕底部。

在 Pygame 中,较高的数字更接近屏幕的底部边缘。

在真实的世界中,引力影响一切。然而,在平台游戏中,引力是有选择性的 —— 如果你添加引力到你的整个游戏世界,你的所有平台都将掉到地上。反之,你可以仅添加引力到你的玩家和敌人精灵中。

首先,在你的 Player 类中添加一个 gravity 函数:

    def gravity(self):        self.movey += 3.2 # 玩家掉落的多快

这是一个简单的函数。首先,不管你的玩家是否想运动,你设置你的玩家垂直运动。也就是说,你已经编程你的玩家总是在下降。这基本上就是引力。

为使引力函数生效,你必须在你的主循环中调用它。这样,当每一个处理循环时,Python 都应用下落运动到你的玩家。

在这代码中,添加第一行到你的循环中:

    player.gravity() # 检查引力    player.update()

启动你的游戏来看看会发生什么。要注意,因为它发生的很快:你是玩家从天空上下落,马上掉出了你的游戏屏幕。

你的引力模拟是工作的,但是,也许太好了。

作为一次试验,尝试更改你玩家下落的速度。

给引力添加一个地板

你的游戏没有办法发现你的角色掉落出世界的问题。在一些游戏中,如果一个玩家掉落出世界,该精灵被删除,并在某个新的位置重生。在另一些游戏中,玩家会丢失分数或一条生命。当一个玩家掉落出世界时,不管你想发生什么,你必须能够侦测出玩家何时消失在屏幕外。

在 Python 中,要检查一个条件,你可以使用一个 if 语句。

你必需查看你玩家是否正在掉落,以及你的玩家掉落的程度。如果你的玩家掉落到屏幕的底部,那么你可以做一些事情。简化一下,设置玩家精灵的位置为底部边缘上方 20 像素。

使你的 gravity 函数看起来像这样:

    def gravity(self):        self.movey += 3.2 # 玩家掉落的多快               if self.rect.y > worldy and self.movey >= 0:            self.movey = 0            self.rect.y = worldy-ty

然后,启动你的游戏。你的精灵仍然下落,但是它停在屏幕的底部。不过,你也许不能看到你在地面层之上的精灵。一个简单的解决方法是,在精灵碰撞游戏世界的底部后,通过添加另一个 -ty 到它的新 Y 位置,从而使你的精灵弹跳到更高处:

    def gravity(self):        self.movey += 3.2 # 玩家掉落的多快               if self.rect.y > worldy and self.movey >= 0:            self.movey = 0            self.rect.y = worldy-ty-ty

现在你的玩家在屏幕底部弹跳,恰好在你地面精灵上面。

你的玩家真正需要的是反抗引力的方法。引力问题是,你不能反抗它,除非你有一些东西来推开引力作用。因此,在接下来的文章中,你将添加地面和平台碰撞以及跳跃能力。在这期间,尝试应用引力到敌人精灵。

到目前为止,这里是全部的代码:

#!/usr/bin/env python3# draw a world# add a player and player control# add player movement# add enemy and basic collision# add platfORM# add gravity # GNU All-Permissive License# Copying and distribution of this file, with or without modification,# are permitted in any medium without royalty provided the copyright# notice and this notice are preserved.  This file is offered as-is,# without any warranty. import pygameimport sysimport os '''Objects''' class Platform(pygame.sprite.Sprite):    # x location, y location, img width, img height, img file        def __init__(self,xloc,yloc,imgw,imgh,img):        pygame.sprite.Sprite.__init__(self)        self.image = pygame.image.load(os.path.join('images',img)).convert()        self.image.convert_alpha()        self.rect = self.image.get_rect()        self.rect.y = yloc        self.rect.x = xloc class Player(pygame.sprite.Sprite):    '''    Spawn a player    '''    def __init__(self):        pygame.sprite.Sprite.__init__(self)        self.movex = 0        self.movey = 0        self.frame = 0        self.health = 10        self.score = 1        self.images = []        for i in range(1,9):            img = pygame.image.load(os.path.join('images','hero' + str(i) + '.png')).convert()            img.convert_alpha()            img.set_colorkey(ALPHA)            self.images.append(img)            self.image = self.images[0]            self.rect  = self.image.get_rect()     def gravity(self):        self.movey += 3.2 # how fast player falls               if self.rect.y > worldy and self.movey >= 0:            self.movey = 0            self.rect.y = worldy-ty-ty           def control(self,x,y):        '''        control player movement        '''        self.movex += x        self.movey += y           def update(self):        '''        Update sprite position        '''         self.rect.x = self.rect.x + self.movex        self.rect.y = self.rect.y + self.movey         # moving left        if self.movex < 0:            self.frame += 1            if self.frame > ani*3:                self.frame = 0            self.image = self.images[self.frame//ani]         # moving right        if self.movex > 0:            self.frame += 1            if self.frame > ani*3:                self.frame = 0            self.image = self.images[(self.frame//ani)+4]         # collisions        enemy_hit_list = pygame.sprite.spritecollide(self, enemy_list, False)        for enemy in enemy_hit_list:            self.health -= 1            print(self.health)         ground_hit_list = pygame.sprite.spritecollide(self, ground_list, False)        for g in ground_hit_list:            self.health -= 1            print(self.health) class Enemy(pygame.sprite.Sprite):    '''    Spawn an enemy    '''    def __init__(self,x,y,img):        pygame.sprite.Sprite.__init__(self)        self.image = pygame.image.load(os.path.join('images',img))        #self.image.convert_alpha()        #self.image.set_colorkey(ALPHA)        self.rect = self.image.get_rect()        self.rect.x = x        self.rect.y = y        self.counter = 0           def move(self):        '''        enemy movement        '''        distance = 80        speed = 8         if self.counter >= 0 and self.counter <= distance:            self.rect.x += speed        elif self.counter >= distance and self.counter <= distance*2:            self.rect.x -= speed        else:            self.counter = 0         self.counter += 1 class Level():    def bad(lvl,eloc):        if lvl == 1:            enemy = Enemy(eloc[0],eloc[1],'yeti.png') # spawn enemy            enemy_list = pygame.sprite.Group() # create enemy group            enemy_list.add(enemy)              # add enemy to group                   if lvl == 2:            print("Level " + str(lvl) )         return enemy_list     def loot(lvl,lloc):        print(lvl)     def ground(lvl,gloc,tx,ty):        ground_list = pygame.sprite.Group()        i=0        if lvl == 1:            while i < len(gloc):                ground = Platform(gloc[i],worldy-ty,tx,ty,'ground.png')                ground_list.add(ground)                i=i+1         if lvl == 2:            print("Level " + str(lvl) )         return ground_list     def platform(lvl,tx,ty):        plat_list = pygame.sprite.Group()        ploc = []        i=0        if lvl == 1:            ploc.append((0,worldy-ty-128,3))            ploc.append((300,worldy-ty-256,3))            ploc.append((500,worldy-ty-128,4))             while i < len(ploc):                j=0                while j <= ploc[i][2]:                    plat = Platform((ploc[i][0]+(j*tx)),ploc[i][1],tx,ty,'ground.png')                    plat_list.add(plat)                    j=j+1                print('run' + str(i) + str(ploc[i]))                i=i+1         if lvl == 2:            print("Level " + str(lvl) )         return plat_list '''Setup'''worldx = 960worldy = 720 fps = 40 # frame rateani = 4  # animation cyclesclock = pygame.time.Clock()pygame.init()main = True BLUE  = (25,25,200)BLACK = (23,23,23 )WHITE = (254,254,254)ALPHA = (0,255,0) world = pygame.display.set_mode([worldx,worldy])backdrop = pygame.image.load(os.path.join('images','stage.png')).convert()backdropbox = world.get_rect()player = Player() # spawn playerplayer.rect.x = 0player.rect.y = 0player_list = pygame.sprite.Group()player_list.add(player)steps = 10 # how fast to move eloc = []eloc = [200,20]gloc = []#gloc = [0,630,64,630,128,630,192,630,256,630,320,630,384,630]tx = 64 #tile sizety = 64 #tile size i=0while i <= (worldx/tx)+tx:    gloc.append(i*tx)    i=i+1 enemy_list = Level.bad( 1, eloc )ground_list = Level.ground( 1,gloc,tx,ty )plat_list = Level.platform( 1,tx,ty ) '''Main loop'''while main == True:    for event in pygame.event.get():        if event.type == pygame.QUIT:            pygame.quit(); sys.exit()            main = False         if event.type == pygame.KEYDOWN:            if event.key == pygame.K_LEFT or event.key == ord('a'):                print("LEFT")                player.control(-steps,0)            if event.key == pygame.K_RIGHT or event.key == ord('d'):                print("RIGHT")                player.control(steps,0)            if event.key == pygame.K_UP or event.key == ord('w'):                print('jump')         if event.type == pygame.KEYUP:            if event.key == pygame.K_LEFT or event.key == ord('a'):                player.control(steps,0)            if event.key == pygame.K_RIGHT or event.key == ord('d'):                player.control(-steps,0)            if event.key == pygame.K_UP or event.key == ord('w'):                print('jump')             if event.key == ord('q'):                pygame.quit()                sys.exit()                main = False     world.blit(backdrop, backdropbox)    player.gravity() # check gravity    player.update()    player_list.draw(world)    enemy_list.draw(world)    ground_list.draw(world)    plat_list.draw(world)    for e in enemy_list:        e.move()    pygame.display.flip()    clock.tick(fps)

“怎么用Python在游戏中模拟引力”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么用Python在游戏中模拟引力

本文链接: https://lsjlt.com/news/284249.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么用Python在游戏中模拟引力
    本篇内容介绍了“怎么用Python在游戏中模拟引力”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!添加一个引力函数记住你的玩家已经有了一个决定...
    99+
    2023-06-16
  • 怎么用Python模拟谷歌的小恐龙游戏
    这篇文章主要介绍“怎么用Python模拟谷歌的小恐龙游戏”,在日常操作中,相信很多人在怎么用Python模拟谷歌的小恐龙游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python模拟谷歌的小恐龙游戏...
    99+
    2023-06-21
  • 云服务器怎么用模拟器玩游戏
    1. 什么是云服务器 云服务器是一种基于云计算技术的虚拟服务器,它可以通过互联网进行远程访问和管理。云服务器可以提供高性能、高可靠性、高可扩展性和高安全性的计算资源,可以满足各种应用场景的需求。 2. 什么是模拟器 模拟器是一种软件,它可...
    99+
    2023-10-26
    模拟器 玩游戏 服务器
  • 利用Python模拟谷歌的小恐龙游戏
    目录前言开发工具环境搭建先睹为快代码介绍前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 PS:如有需要Python学习资料...
    99+
    2024-04-02
  • 云服务器怎么用模拟器打开游戏模式
    如果您想使用模拟器来运行游戏模式,可以按照以下步骤: 打开模拟器。打开您的电脑控制面板,然后进入计算机或者游戏。 点击“开始”或“所有程序”,然后选择“模拟器”。这将打开一个游戏设置界面。 在“所有程序”中,选择“游戏”。点击“开始”或...
    99+
    2023-10-27
    模拟器 模式 服务器
  • 云服务器怎么用模拟器打开游戏
    如果您想使用模拟器打开游戏,您需要安装一个游戏模拟器。在模拟器中,您可以找到一个游戏安装程序并安装相应的游戏。安装完毕后,在模拟器中的游戏选项中,您可以找到“游戏库”或“模拟器库”选项,其中包含了游戏的安装程序、游戏配置文件和一些您可能已经...
    99+
    2023-10-26
    模拟器 服务器 游戏
  • 云服务器怎么用模拟器登录游戏
    如果您想使用云服务器登录游戏,以下是一些使用模拟器登录游戏的建议: 1.在模拟器的控制台中启用游戏:在开始菜单中的程序和文件夹中打开游戏程序。在游戏程序页面中,将游戏路径下的文件复制到控制台中的文件夹或者游戏文件夹中,然后在模拟器中打开这...
    99+
    2023-10-26
    模拟器 服务器 游戏
  • 云服务器怎么用模拟器玩游戏的
    在使用云服务器模拟器玩游戏时,用户可以选择不同的游戏场景,如在线多人游戏、单机游戏、大型网游等。在模拟器中,用户可以通过修改云服务器的设置来改变游戏场景,如更改屏幕大小、游戏画质等,从而模拟出不同的游戏场景。 在模拟器中玩游戏时,用户可以...
    99+
    2023-10-28
    模拟器 玩游戏 服务器
  • 云服务器怎么装模拟器游戏
    如果您想在云服务器上安装模拟器游戏,您可以按照以下步骤进行操作: 首先,需要选择您要安装模拟器游戏的位置,以及需要执行的命令。 在云服务器上注册您的账号,以便能够访问云服务器上的虚拟游戏。 按照要求填写您选择的模拟器类型和游戏版本,可以...
    99+
    2023-10-26
    服务器 装模 游戏
  • 怎么在Python中引用其他模块
    本文小编为大家详细介绍“怎么在Python中引用其他模块”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么在Python中引用其他模块”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、前言在Python中,除了...
    99+
    2023-07-02
  • 云服务器开模拟器怎么开游戏模式
    如果您想在云服务器上开游戏模式,您需要使用虚拟机软件,例如VMware ESX或NFS。您可以在控制面板中找到“创建新虚拟磁盘”或“选择虚拟机”等选项,并按照说明进行操作。 在游戏模式下,您可以通过虚拟化管理器创建一个新的虚拟磁盘。然后,...
    99+
    2023-10-26
    模式 服务器 开模
  • 云服务器怎么用模拟器玩游戏教程
    首先,你需要下载一个虚拟机软件,例如VMware ESX Server或GPUE Server,可以在网上或者淘宝上买。 在虚拟机软件上安装游戏,可以在开始菜单中搜索游戏,或者在VMware商店中搜索“游戏虚拟机”进行下载安装。 安装虚拟...
    99+
    2023-10-26
    模拟器 玩游戏 服务器
  • 怎么在python中引入模块
    本篇文章为大家展示了怎么在python中引入模块,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言...
    99+
    2023-06-14
  • 云服务器开模拟器怎么开游戏
    如果您想在云服务器上开游戏,有几种方法可以实现: 使用第三方模拟器:有很多开源的模拟器,例如ReactNative,可以让您在云端运行您的游戏。您可以搜索并下载这些模拟器,并尝试在模拟器上运行您的游戏。 使用虚拟机(Virtual PC...
    99+
    2023-10-26
    服务器 开模 游戏
  • 云服务器怎么装模拟器游戏的
    如果您想在云服务器上安装模拟器游戏,您可以按照以下步骤进行操作: 在云服务器的控制台中进入“应用程序管理”或“服务器应用程序管理”页面。 在该页面中选择“模拟器游戏”选项。 在下拉菜单中选择您想要安装游戏的位置。 在确认框中点击“OK”...
    99+
    2023-10-26
    服务器 装模 游戏
  • 云服务器怎么安装模拟器游戏
    一、云服务器的安装 在安装模拟器游戏之前,需要先确保您的云服务器具有足够的可用空间,这样才能保证模拟器游戏能够正常运行。如果您的云服务器空间不足,您需要考虑增加云服务器的存储容量或者购买更大的服务器。 在云服务器的安装方面,您需要先在云服...
    99+
    2023-10-27
    服务器 模拟器游戏
  • 云服务器怎么用模拟器打开游戏界面模式
    首先,需要下载一个模拟器软件。有很多软件可以在网上免费下载,例如 Steam、Ouya、Ubuntu、VirtualBox等等。下载完成后,需要安装它。安装完成后,就可以在模拟器中开始使用游戏了。 在模拟器中,玩家可以通过按键盘上的 "X...
    99+
    2023-10-27
    模拟器 界面 模式
  • 云服务器怎么用模拟器打开游戏模式设置
    一、模拟器的优势 方便性:模拟器可以在不同的云服务器上运行不同的游戏,用户可以根据自己的需求选择不同的游戏进行模拟。 稳定性:模拟器可以模拟游戏的运行过程,包括加载、运行、存储、读取等多个环节,保证游戏的运行效果。 兼容性:模拟器可以运...
    99+
    2023-10-28
    模拟器 模式 服务器
  • C++在游戏物理模拟中的优势和不足是什么?
    c++++ 在游戏物理模拟中的优势在于高效性、内存管理、多线程和开源库。它的不足之处包括陡峭的学习曲线、指针管理、平台依赖性和调试复杂性。在实践中,c++ 用于模拟汽车驾驶,优化了代码性...
    99+
    2024-05-13
    c++ 游戏物理模拟
  • 怎么用Python做游戏
    今天小编给大家分享一下怎么用Python做游戏的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。基本框架首先,无论你是做什么游戏...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作