检查圆圈是否在窗口边缘

时间:2017-12-20 14:57:50

标签: python pygame collision pong

我目前正在尝试打乒乓球比赛,但我目前正在努力解决其中的一部分问题。如果屏幕的边缘,我需要让球反弹,但由于某种原因,它继续前进并且没有检测到碰撞。这是我的代码:

SELECT AccountKey,
       LineName,
       AccountName,
       GroupKey,
       AccountNumber,
       ParentAccountKey
INTO tempAccount
FROM
(
    SELECT AccountKey,
           LineName,
           AccountName,
           GroupKey,
           AccountNumber,
           AccountKey AS ParentAccountKey, 
           LAG(AccountKey) OVER(ORDER BY AccountKey) AS PREC
    FROM tempTable2
    WHERE GroupKey IS NULL
    UNION ALL
    SELECT A.AccountKey,
           A.LineName,
           A.AccountName,
           A.GroupKey,
           A.AccountNumber,
           B.AccountKey AS ParentAccountKey,
           B.PREC
    FROM tempTable2 A
         INNER JOIN
    (
        SELECT AccountKey,
               LineName,
               AccountName,
               GroupKey,
               AccountNumber,
               AccountKey AS ParentAccountKey,
               LAG(AccountKey) OVER(ORDER BY AccountKey) AS PREC
        FROM tempTable2
        WHERE GroupKey IS NULL
    ) B ON A.AccountKey < B.AccountKey
           AND (B.PREC IS NULL
                OR B.PREC < A.AccountKey)
    WHERE A.GroupKey IS NOT NULL
          AND B.GroupKey IS NULL
) X
ORDER BY AccountKey;

有谁知道为什么这不起作用?我刚刚学习了pygame。

1 个答案:

答案 0 :(得分:1)

你检查的变量是否发现你的“球是否超出范围”(所以评论,谢谢你!)永远不会改变。 E. g。 btc在循环外部的开头分配一次,然后再不分配。

我想你应该在by(等)发生变化时更改它们。

这肯定不是一个好的编码风格。但试图解决这个问题会打开一大堆蠕虫; - )

编辑:此外你应该否定速度变量而不是位置变量,i。即bym代替bybym = bym * -1。解决了这两个问题后,我的球不断地从窗户的所有边缘反弹。然而,踏板还没有影响力:

    # check if ball is out of bounds
    btc = by
    blc = bx
    bbc = by + br + br
    brc = bx + br + br
    if start and startballmove:
        if btc <= 0:
            bym = bym * -1
            print("top side")
        if bbc >= height:
            bym = bym * -1
            print("bottom side")
        if blc <= 0:
            bxm = bxm * -1
            print("left side")
        if brc >= width:
            bxm = bxm * -1
            print("right side")