如何解决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 , sif 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 举报,一经查实,本站将立刻删除。