2
 import pygame, sys 
 from pygame.locals import * 

 pygame.init()

 size = width, height = 480,320
 screen = pygame.display.set_mode(size)
 r = 0
 bif = pygame.image.load("map5.png") 
 pygame.display.set_caption("Pygame 2D RPG !")
 x,y=0,0
 movex, movey=0,0
 character="boy.png"
 player=pygame.image.load(character).convert_alpha()
 while True:
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        sys.exit()
    if event.type==KEYDOWN:
        if event.key==K_a:
            movex=-1
        elif event.key==K_d:
            movex=+1
        elif event.key==K_w:
            movey=-1
        elif event.key==K_s:
            movey=+1
    if event.type==KEYUP:        
        if event.key==K_a:
            movex=0
        elif event.key==K_d:
            movex=0
        elif event.key==K_w:
            movey=0
        elif event.key==K_s:
            movey=0    

    x+=movex
    y+=movey    

    screen.fill((r,0,0))
    screen.blit(bif,(0,0))
    screen.blit(player,(x,y))
    pygame.display.flip()

一切都很好,除了我想知道我到底是如何将相机移动到玩家去的地方抱歉,我无法向您显示地图文件,因为您无法向其中添加图像。但是感谢您的时间

地图在这里:https ://dl.dropboxusercontent.com/u/110087275/2d%20pygame/map5.png 最后代码在这里:https ://dl.dropboxusercontent.com/u/110087275/2d%20pygame /2d_pygame.py

再次感谢您的时间和精力!!!!!!!

4

1 回答 1

7

In general to create a "camera effect" you can try the following:

create two variables "CameraX, CameraY" (or give them your own names) and everytime you blit something on the screen do the following:

screen.blit(bif,(0 -CameraX,0 -CameraY))
screen.blit(player,(x -CameraX,y -CameraY))
pygame.display.flip()

Now everytime you want to move the screen (with the camera) just use

CameraX += 10 #Or any value you want

Note that this way does not work if CameraX is a negative number and will show buggy behaviour so consider CameraX = 0 and CameraY = 0 as the top left corner of the map

Also using this you may need to play a bit with some other options like when will the camera move? and how to limit the camera from going over the limits of "bif" (your map)

tip:

#after input inside the while:
if x > get_width /4 *3:
    CameraX += 10

this Code makes camera move to the "right" if the "boy" character moves more than 3/4 of the screen's width

于 2013-11-28T09:04:55.900 回答