Python——pygame图像处理(二)


上接:
Python——pygame图像处理(一)

4. 一直移到最右边:

import pygame,sys
pygame.init()
screen = pygame.display.set_mode([640,480])
screen.fill([255,255,255])
my_dog = pygame.image.load("timg.jpg")
x = 50
y = 50
screen.blit(my_dog,[x,y])
pygame.display.flip()
for looper in range(1,100):
    pygame.draw.rect(screen,[255,255,255],[x,y,90,90],0)
    x = x + 5
    screen.blit(my_dog,[x,y])
    pygame.display.flip()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
pygame.quit()

在这里插入图片描述

如果增加x,也就是让小狗一直往右移,会怎么样呢?即换为:

for looper in range(1,200):

最后发现小狗消失了!因为我们打开的窗口x = 640就到头了。

5. 一维反弹

如果我们想让小狗在窗口的边界反弹,就要知道它什么时候“碰到”窗口边界,然后让它朝反方向移动。如果想让它一直来回移动,就要在窗口左右两边都做同样的处理。

左边界很容易,只要检查小狗的位置是不是等于0(或者某个很小的数)。

右边界,就要查看小狗是不是在窗口的右边界上。不过小狗的边界是按它的左边界,而不是右边界设置的,所以必须减去小狗的宽度。

程序如下:

import pygame,sys
pygame.init()
screen = pygame.display.set_mode([640,480])
screen.fill([255,255,255])
my_dog = pygame.image.load("timg.jpg")
x = 50
y = 50
x_speed = 10

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    pygame.time.delay(20)
    pygame.draw.rect(screen,[255,255,255],[x,y,150,100],0)  #检查小狗是否在窗口边界
    x = x + x_speed #方向反转
    if x > screen.get_width() - 100 or x < 0:
        x_speed = - x_speed

    screen.blit(my_dog,[x,y])
    pygame.display.flip()

pygame.quit()

6.在2-D空间中反弹

很简单,只需要在x的基础上加上y坐标:

import pygame,sys
pygame.init()
screen = pygame.display.set_mode([640,480])
screen.fill([255,255,255])
my_dog = pygame.image.load("timg.jpg")
x = 50
y = 50
x_speed = 10
y_speed = 10

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False


    pygame.time.delay(20)
    pygame.draw.rect(screen,[255,255,255],[x,y,100,80],0)
    x = x + x_speed
    y = y + y_speed
    if x > screen.get_width() - 100 or x < 0:
        x_speed = - x_speed
    if y > screen.get_height() - 80 or y < 0:
        y_speed = - y_speed   

    screen.blit(my_dog,[x,y])
    pygame.display.flip()

pygame.quit()

7. 让图像翻转

不让小狗在屏幕边界反弹,而是让它翻转。这表示,小狗在右边界消失时,又会在左边界重新出现。先看水平方向的情况:

import pygame,sys
pygame.init()
screen = pygame.display.set_mode([640,480])
screen.fill([255,255,255])
my_dog = pygame.image.load("timg.jpg")
x = 50
y = 50
x_speed = 5

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    pygame.time.delay(20)
    pygame.draw.rect(screen,[255,255,255],[x,y,100,80],0)
    x = x + x_speed

    if x > screen.get_width():
        x = 0
    
    screen.blit(my_dog,[x,y])
    pygame.display.flip()

pygame.quit()

但这是它是突然“闪入”到左边,强迫症看着特别不舒服,修改程序为“滑入”试试:

import pygame,sys
pygame.init()
screen = pygame.display.set_mode([640,480])
screen.fill([255,255,255])
my_dog = pygame.image.load("timg.jpg")
x = 50
y = 50
x_speed = 5

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    pygame.time.delay(20)
    pygame.draw.rect(screen,[255,255,255],[x,y,100,80],0)
    x = x + x_speed

    if x > screen.get_width():
        x = -100

    screen.blit(my_dog,[x,y])
    pygame.display.flip()

pygame.quit()

猜你喜欢

转载自blog.csdn.net/qq_37369201/article/details/83996614
今日推荐