当前位置: 首页 > 知识库问答 >
问题:

pyplay中的碰撞点函数是如何工作的?[重复]

靳祺然
2023-03-14

所以我在做一个关于乒乓的实验,我迷失了碰撞点的概念,碰撞点是pyplay中的一个函数,它检查圆心是否在桨内。在看留档时,我仍然感到困惑,因为我对编程非常陌生,我真的很难适应并掌握扔给我的新技能。如果有人能帮我解释一下,也许能举一个简单的例子,我将不胜感激。

共有1个答案

薛弘阔
2023-03-14

点碰撞记录在PyGame Rect类中。

基本上,您将坐标传递给pygame。矩形。collidepoint(),如果该点位于矩形的边界内,则它将返回True

import pygame

# Window size
WINDOW_WIDTH=400
WINDOW_HEIGHT=400

pygame.init()
window = pygame.display.set_mode( ( WINDOW_WIDTH, WINDOW_HEIGHT ) )
pygame.display.set_caption("Point Collision")

BLACK = (  50,  50,  50 )
GREEN = (  34, 139,  34 )
BLUE  = ( 161, 255, 254 )

# The rectangle to click-in
# It is window-centred, and 33% the window size
click_rect  = pygame.Rect( WINDOW_WIDTH//3, WINDOW_HEIGHT//3, WINDOW_WIDTH//3, WINDOW_HEIGHT//3 )
rect_colour = BLACK

### Main Loop
clock = pygame.time.Clock()
done = False
while not done:

    # Handle all the events
    for event in pygame.event.get():
        if ( event.type == pygame.QUIT ):
            done = True

        elif ( event.type == pygame.MOUSEBUTTONUP ):
            mouse_position = pygame.mouse.get_pos()             # Location of the mouse-click
            if ( click_rect.collidepoint( mouse_position ) ):   # Was that click inside our rectangle 
                print( "hit" )
                # Flip the colour of the rect
                if ( rect_colour == BLACK ):
                    rect_colour = GREEN
                else:
                    rect_colour = BLACK
            else:
                print( "click-outside!" )

    # update the screen
    window.fill( BLUE )
    pygame.draw.rect( window, rect_colour, click_rect)  # DRAW OUR RECTANGLE
    pygame.display.flip()

    # Clamp the FPS to an upper-limit
    clock.tick_busy_loop( 60 )


pygame.quit()

注意在代码的下半部分使用了collidepoint()

if ( click_rect.collidepoint( mouse_position ) ):  

这里的代码正在检查最近通过鼠标输入事件发现的坐标是否在click_rect(pyplay)中。在主循环之前声明的rect)。如果坐标在矩形内,则以不同的颜色绘制。

这里的大部分代码只是打开窗口,然后运行主输入/更新循环。

 类似资料:
  • 我很难理解colliderect如何与精灵一起工作。我有一个很好的想法,但每当我尝试在游戏中实现它时,我只会收到错误消息“attributeError:'pygame.surface'对象没有属性'rect'” 基本上我所有的精灵都能工作(不包括ufo1),但是当我创建一个ufo1精灵的时候,它就崩溃了,我不知道如何修复它。 提前感谢。

  • 我目前正在制作一个平台游戏,我被阻止碰撞...你能帮帮我吗?我实际上添加了一些方块来测试碰撞,在Perso类下创建了一个玩家。我真的需要在那个入口之后制造碰撞,并且必须精心设计重力来让玩家跳跃。这是我的代码:导入pyplay从pygame.locals导入*pygame.init() pygame.quit()

  • 我有两个函数:< code>functionA()和< code>functionB(),都有一个返回类型< code>boolean。 如果它们中的任何一个返回true,并且如果函数A返回true,我想继续执行,我不希望函数B执行。 像 上面的代码能满足我的要求吗?

  • 我正在做一个类似生存的游戏,我有两种类型的碰撞,一种是玩家的敌人,另一种是敌人身上的子弹。我也有一个健康栏,由于某些原因,在picbox被移除后,健康仍然下降,就像敌人与玩家互动一样。 这是子弹碰撞代码的一个块(所有8个方向的所有代码都是相同的) 这是敌方与玩家碰撞的暗号

  • 我需要检测一个球(椭圆形)和多个块(矩形)之间的碰撞。在游戏中表示块的类块中,我有以下代码来检测碰撞(其简短版本,仅用于演示示例): 碰撞不好,因为椭圆形,但一般来说,我想问是否有东西在java(摇摆)检测碰撞,我的意思是如果矩形没有完全显示在画布上,这意味着球重叠一个块坐标

  • 我正在用pygame和数学模块用python编写一个游戏。我写了这些代码来进行碰撞检测(我制造了5个障碍物,我想让我的玩家与之碰撞),但问题是在玩游戏的过程中,有时有效,有时无效。 这些是我定义的碰撞函数 在while循环中 请告诉我哪里做错了。