首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过按键事件运行代码,但不停止其他正在运行的函数

如何通过按键事件运行代码,但不停止其他正在运行的函数
EN

Stack Overflow用户
提问于 2019-04-04 22:14:53
回答 1查看 45关注 0票数 0

这段代码大部分都能用,但当我按下空格键时,子弹应该会发射并跟随外星人一起移动。相反,子弹会移动,外星人只是停在它的轨迹上,就像在shoot()函数启动时enemy_move()函数已经停止一样。如果你知道如何让它们同时工作,那就太好了。

代码语言:javascript
运行
复制
bulletState = TRUE
bulletHealth = 0
enemyHealth = 100
def SpaceInvaders():
    window.destroy()
    SpaInv=Tk()
    s = Canvas(SpaInv, height=HEIGHT, width=WIDTH, bg='black')
    s.pack()
    ship = s.create_polygon(590, 485, 630, 485, 610, 430, fill='red')
    bullet = s.create_oval(600, 425, 620, 400, fill='yellow', state=HIDDEN)
    enemy = s.create_rectangle(4, 4, 34, 34, fill = 'green')
    def enemy_move():
        global enemyHealth
        while enemyHealth > 0:
            pos = s.coords(enemy)
            s.move(enemy, 3, 0)
            time.sleep(0.01)
            SpaInv.update()
    def shoot(event):
        global bulletHealth
        global WIDTH
        global bulletState
        s.itemconfig(bullet, state=NORMAL)
        bulletState = FALSE
        while bulletHealth == 0:
            s.move(bullet, 0, -3)
            time.sleep(0.01)
            SpaInv.update()
    s.bind_all('<Key>', move_ship)
    s.bind_all('<space>', shoot)
    enemy_move()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-05 05:05:43

下面是你的示例代码的高度简化的修改,允许外星人和子弹同时移动。解决方案不是编写一个循环来完成整个移动,而是编写一个函数来完成一小部分移动,然后通过after()调用自身

代码语言:javascript
运行
复制
from tkinter import *

WIDTH, HEIGHT = 900, 600

def enemy_move():
    s.move(enemy, 3, 0)
    SpaInv.after(10, enemy_move)

def shoot(event=None):
    s.itemconfig(bullet, state=NORMAL)
    s.move(bullet, 0, -3)
    SpaInv.after(10, shoot)

SpaInv = Tk()
s = Canvas(SpaInv, height=HEIGHT, width=WIDTH, bg='black')
s.pack()

ship = s.create_polygon(590, 485, 630, 485, 610, 430, fill='red')
bullet = s.create_oval(600, 425, 620, 400, fill='yellow', state=HIDDEN)
enemy = s.create_rectangle(4, 4, 34, 34, fill='green')

s.bind_all('<space>', shoot)

enemy_move()

SpaInv.mainloop()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55518167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档