微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pygame雪碧运动

如何解决pygame雪碧运动

下面,我定义了一个pygame游戏循环。我可以在8个方向上移动精灵。

    #player position
    def player(x,y):
        screen.blit(playerImg,(x,y))
    
    #enemy position
    def enemy(x,y):
        screen.blit(enemyImg,y))
    
    def fire_bullet(x,y):
        global bullet_state
        bullet_state = "fire"
        screen.blit(bulletImg,(x + 16,y + 10))

    # Game Loop
    running = True
    while running:
        #fill values RGB - Red,Green,Blue
        screen.fill(bc.goodblue)
        #background immage
        screen.blit(background,(0,0))
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False        
            #if keystroke is pressed
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT or event.key == ord('a'):
                    playerx_change = -movespeed
                if event.key == pygame.K_RIGHT or event.key == ord('d'):
                    playerx_change = movespeed
                if event.key == pygame.K_UP or event.key == ord('w'):
                    playery_change = -movespeed
                if event.key == pygame.K_DOWN or event.key == ord('s'):
                    playery_change = movespeed
                if event.key == pygame.K_SPACE and bullet_state == "ready":
                    bulletx = playerx
                    fire_bullet(bulletx,bullety)
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == ord('a') or event.key == ord('d'):
                    playerx_change = 0
                if event.key == pygame.K_UP or event.key == pygame.K_DOWN or event.key == ord('s') or event.key == ord('w'):
                    playery_change = 0


        #player movement
        playery += playery_change
        playerx += playerx_change

        if playerx <= 0:
            playerx = 0
        if playerx >= width - PImgWidth:
            playerx = width - PImgWidth
        if playery <=0:
            playery = 0
        if playery >=height - PImgHeight:
            playery = height - PImgHeight
    
        #enemy movement
        enemyx += enemyx_change
   
        if enemyx <= 0:
            enemyx_change = enemyspeed
            enemyy += enemyy_change
        if enemyx >= width - EImgWidth:
            enemyx_change = -enemyspeed
            enemyy += enemyy_change
    
        player(playerx,playery)
        enemy(enemyx,enemyy)
        pygame.display.update()
    
    pygame.quit()

但是,有一个小问题。

如果按左箭头键,子画面将向左移动。如果再按一次向右箭头键,则精灵将开始向右移动。

如果我再松开向左箭头键,则精灵将停止。我不希望这种情况发生。如果我朝着正确的方向移动,并且放开了左箭头键,我想继续朝着正确的方向移动。

我不知道设置此设置的有效方法

解决方法

如果释放 LEFT RIGHT a d ,则必须检查其中之一在设置library(lattice) library(ggplot2) library(broom) theme_set(theme_bw()) mod <- loess(NOx ~ E,ethanol,degree = 1,span = .75) fit <- broom::augment(mod) # plot to animate with lm showing moving loess ggplot(fit,aes(E,NOx)) + geom_point() + geom_line(aes(y = .fitted),color = "red") library(dplyr) dat <- ethanol %>% # note use of crossing over inflate tidyr::crossing(center = unique(ethanol$E)) %>% mutate(dist = abs(E - center)) %>% filter(rank(dist) / n() <= .75) %>% mutate(weight = (1 - (dist / max(dist)) ^ 3) ^ 3) # animate plot -- awry p <- ggplot(dat,aes(x=E,y=NOx)) + geom_point(aes(alpha = weight)) + geom_smooth(aes(group = center,weight = weight),method = "lm",se = FALSE) + geom_vline(aes(xintercept = center),lty = 2) + geom_line(aes(y = .fitted),data = fit,color = "red") # why so many lm fits in middle range of E that are below loess line? # something is wrong with the groups defined by center? p # make the animation library(gganimate) p + labs(title = 'E={frame_time}') + transition_time(center) 之前,仍需按键。使用pygame.key.get_pressed()评估键的状态:

playerx_change = 0:

分别对 w

进行 UP DOWN s
if event.type == pygame.KEYUP:
    if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == ord('a') or event.key == ord('d'):

        keys = pygame.key.get_pressed()
        if not keys[pygame.K_LEFT] and not keys[pygame.K_RIGHT] and not keys[pygame.K_a] and not keys[pygame.K_d]:
            playerx_change = 0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。