制作一个可拖动的黑盒子

Make a draggable black box

我正在尝试制作一个可以单击和拖动的黑框,但我似乎卡住了。谁能帮我看看哪里出错了?

def main_game():
    import pygame
    import math
    from time import *

    pygame.init()

    displayWidth = 268
    displayHeight = 552

    cyan = (0,255,255)
    red = (255,0,0)
    dark_red = (150,0,0)
    black = (0,0,0)
    grey = (200,200,200)
    dark_cyan = (0,230,230)

    my_rect = pygame.Rect([100,100,100,100])

    gameDisplay = pygame.display.set_mode((displayWidth,displayHeight))
    pygame.display.set_caption('Test')

    pygame.display.update()

    gameExit = False

主游戏循环:

    while not gameExit:
        for event in pygame.event.get():
            print event
            gameDisplay.fill(grey)

            pygame.draw.rect(gameDisplay, black, my_rect)

            if event.type == pygame.QUIT:
                ExitFunction()

            pygame.display.update()
            if event.type == pygame.MOUSEBUTTONDOWN:
                is_inside = my_rect.collidepoint(pygame.mouse.get_pos())

                if is_inside == 1:
                    gameExit = True
                    DragScreen()

这是我徒劳的尝试之一,我创建了一个新函数来尝试将矩形定位到我的鼠标坐标。

def DragScreen():
    import pygame
    from time import *

    pygame.init()

    displayWidth = 268
    displayHeight = 552

    cyan = (0,255,255)
    red = (255,0,0)
    dark_red = (150,0,0)
    black = (0,0,0)
    grey = (200,200,200)
    dark_cyan = (0,230,230)

    gameDisplay = pygame.display.set_mode((displayWidth, displayHeight))
    pygame.display.set_caption('Test')

    pygame.display.update()

    gameExit = False

    while not gameExit:
        for event in pygame.event.get():
            print event
            gameDisplay.fill(grey)

            pygame.draw.rect(gameDisplay, black, pygame.mouse.get_pos())

            if event.type == pygame.QUIT:
                ExitFunction()

我会添加一个pygame.MOUSEBUTTONUP事件来停止拖拽框

            pygame.display.update()

我创建了这个函数,当它被调用时直接退出(它工作正常)。

def ExitFunction():
    import pygame
    from time import*

    pygame.init()

    pygame.quit()
    quit()


    pygame.quit()
    quit()
main_game()

所以基本上,您可以测试对对象的点击。并将对象移动到鼠标的位置:

################################################################################
# Imports ######################################################################
################################################################################

from pygame.locals import *
import pygame, os, sys

################################################################################
# Screen Setup #################################################################
################################################################################

pygame.init()
scr = pygame.display.set_mode((640, 480))
pygame.display.set_caption('Box Test')

################################################################################
# Make Square ##################################################################
################################################################################

surf = pygame.Surface((64, 64)); surf.fill((255, 0, 0))
rect = surf.get_rect(); rect.center = (320, 240)

################################################################################
# Game Loop ####################################################################
################################################################################

while True:
    pygame.display.update()
    scr.fill((0, 0, 0))
    scr.blit(surf, rect)

    if pygame.mouse.get_pressed()[0]:
        if rect.collidepoint(pygame.mouse.get_pos()):
            rect.center = pygame.mouse.get_pos()

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

################################################################################
################################################################################
################################################################################