Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能';射击时不要移动python太空入侵者游戏中的角色(使用Zelle图形包)_Python_Graphics - Fatal编程技术网

我能';射击时不要移动python太空入侵者游戏中的角色(使用Zelle图形包)

我能';射击时不要移动python太空入侵者游戏中的角色(使用Zelle图形包),python,graphics,Python,Graphics,我必须使用Zelle图形包为我的中间python类制作一个空间入侵者游戏。我一直对投射物有一些问题,它将运行代码,射出子弹,并继续移动子弹,但当子弹移动时,我无法移动角色。我认为这是一个相当简单的问题,但我还没有足够的编程经验。谢谢 from graphics import * from time import * game_over = False win = GraphWin("skulls and bones", 500, 500) skull = Image(Point(250, 450

我必须使用Zelle图形包为我的中间python类制作一个空间入侵者游戏。我一直对投射物有一些问题,它将运行代码,射出子弹,并继续移动子弹,但当子弹移动时,我无法移动角色。我认为这是一个相当简单的问题,但我还没有足够的编程经验。谢谢

from graphics import *
from time import *
game_over = False
win = GraphWin("skulls and bones", 500, 500)
skull = Image(Point(250, 450), "skull_2.gif")
skull.draw(win)
bullet = Circle(Point(250, 250), 10)
bullet.setFill("red")


def bone():
    value = 0
    key = win.getKey()
    if key == "x":
        bullet.draw(win)
    return bullet


def space_ship_move():
    key = win.getKey()
    if key == "a":
        skull.move(-10, 0)
    if key == "d":
        skull.move(10, 0)
    if key == "x":
        bone()
        for i in range(100):
            sleep(1)
            bone().move(0, -5)
    return key


while not game_over:
    space_ship_move()'''


有两个问题:首先,
win.getKey()
阻塞,直到用户按键。您不想这样做-使用
win.checkKey()
。其次,您需要解耦动画和输入处理,因为如果没有输入,您希望项目符号也会移动。可以使用以下结构执行此操作:

def space_ship_move():       
    handle_input()        
    animate()        
    sleep(0.1)
handle\u input()
主要是您在其中已经拥有的:

bullet = None
bulletAnimStep = -1

def bone():
    global bullet, bulletAnimStep

    if bullet is not None:
        bullet.undraw()
    bullet = Circle(Point(250, 250), 10)
    bullet.setFill("red")
    bullet.draw(win)
    bulletAnimStep = 0

def handle_input():
    key = win.checkKey()
    if key == "a":
        skull.move(-10, 0)
    if key == "d":
        skull.move(10, 0)
    if key == "x":
        bone()   
我假设
bone()
应该负责创建一个新的项目符号。这就是当前函数所做的。它还将
bulletAnimStep
设置为
0
,表示我们正处于bullet动画的开始。我们的
animate()
可以使用该信息来决定何时停止子弹动画。这就是它的外观:

def animate():
    global bulletAnimStep

    #animate bullet
    if bulletAnimStep >= 0:
        bulletAnimStep += 1
        bullet.move(0, -5)
        if bulletAnimStep >= 100:
            #the bullet has gone far enough
            bullet.undraw()
            bulletAnimStep = -1

有两个问题:首先,
win.getKey()
阻塞,直到用户按键。您不想这样做-使用
win.checkKey()
。其次,您需要解耦动画和输入处理,因为如果没有输入,您希望项目符号也会移动。可以使用以下结构执行此操作:

def space_ship_move():       
    handle_input()        
    animate()        
    sleep(0.1)
handle\u input()
主要是您在其中已经拥有的:

bullet = None
bulletAnimStep = -1

def bone():
    global bullet, bulletAnimStep

    if bullet is not None:
        bullet.undraw()
    bullet = Circle(Point(250, 250), 10)
    bullet.setFill("red")
    bullet.draw(win)
    bulletAnimStep = 0

def handle_input():
    key = win.checkKey()
    if key == "a":
        skull.move(-10, 0)
    if key == "d":
        skull.move(10, 0)
    if key == "x":
        bone()   
我假设
bone()
应该负责创建一个新的项目符号。这就是当前函数所做的。它还将
bulletAnimStep
设置为
0
,表示我们正处于bullet动画的开始。我们的
animate()
可以使用该信息来决定何时停止子弹动画。这就是它的外观:

def animate():
    global bulletAnimStep

    #animate bullet
    if bulletAnimStep >= 0:
        bulletAnimStep += 1
        bullet.move(0, -5)
        if bulletAnimStep >= 100:
            #the bullet has gone far enough
            bullet.undraw()
            bulletAnimStep = -1