首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python pygame (带播放器的滚动相机)

python pygame (带播放器的滚动相机)
EN

Stack Overflow用户
提问于 2020-06-14 21:38:37
回答 1查看 58关注 0票数 2

我使用pygame框架在Python中实现我的游戏。下面是我的代码。

我不知道如何正确地在StackOverflow上提问,所以我已经包含了整个程序,以便您可以看到所有细节。

我想有一个相机,可以跟踪我的球员,但我不知道怎么做。

你能帮帮我吗?

代码语言:javascript
复制
import pygame
pygame.init()

class Oyun():
    def __init__(self):
        self.x = 20
        pygame.display.set_caption("Cabbar_Oyunda_Vol01")
        self.uzunluk = 1280
        self.genişlik = 800
        self.pencere = pygame.display.set_mode((self.uzunluk, self.genişlik))
        self.area = self.uzunluk * self.genişlik
        self.clock = pygame.time.Clock()
        self.adam = pygame.image.load("R8E.png")
        self.bg = pygame.image.load("mountains.png").convert()
        self.bgWidth, self.bgHeight = self.bg.get_rect().size
        self.stageWidth = self.bgWidth * 2
        self.stagePosX=0
        self.startScrollingPosX=self.uzunluk/2
        self.circleRadius=25
        self.circlePosX=self.circleRadius
        self.playerPosX = self.circleRadius
        self.playerPosY = 685
        self.playerVelocityX = 0
        self.right = False
        self.left = False
        self.walkLeft = [pygame.image.load('L1.png'), pygame.image.load('L2.png'), pygame.image.load("L3.png"), pygame.image.load('L4.png'), pygame.image.load('L5.png'), pygame.image.load('L6.png'), pygame.image.load('L7.png'), pygame.image.load('L8.png'), pygame.image.load('L9.png')]
        self.walkRight = [pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R5.png'), pygame.image.load('R6.png'), pygame.image.load('R7.png'), pygame.image.load('R8.png'),pygame.image.load('R9.png')]
        self.walkCount=0
        self.canavar_left=[pygame.image.load("L1E.png"),pygame.image.load("L2E.png"),pygame.image.load("L3E.png"),pygame.image.load("L4E.png"),pygame.image.load("L5E.png"),pygame.image.load("L6E.png"),pygame.image.load("L7E.png"),pygame.image.load("L8E.png"),pygame.image.load("L9E.png")]
        self.canavar_right = [pygame.image.load("R1E.png"),  pygame.image.load("R2E.png"), pygame.image.load("R3E.png"),pygame.image.load("R4E.png"), pygame.image.load("R5E.png"), pygame.image.load("R6E.png"),pygame.image.load("R7E.png"), pygame.image.load("R8E.png"), pygame.image.load("R9E.png")]
        self.c_walkount=0
        self.isJump = False
        self.jumpCount = 10
        self.sayac=0
        self.yorgunluk_x=70
        self.font=pygame.font.SysFont("Arial",17)
        self.mermi=pygame.image.load("bullet.png")
        self.mermi_x=0
        self.mermi_y=0
        self.mermi_stage="ready"
        self.deneme=pygame.image.load("bg.jpg")
        self.a = self.stagePosX + 1300
        self.canavar=False
        pygame.mixer.music.load("background.wav")
        pygame.mixer.music.play(-1)
        self.yon=1
        self.scroll=[0,0]

    def move(self):
        self.clock.tick(40)
        if self.walkCount + 1 >= 27:
            self.walkCount = 0
        if self.right:
            self.pencere.blit(self.walkRight[self.walkCount // 3], (self.circlePosX, self.playerPosY))
            self.walkCount += 1

        elif self.left:
            self.pencere.blit(self.walkLeft[self.walkCount // 3], (self.circlePosX, self.playerPosY))
            self.walkCount += 1
        else:
            self.pencere.blit(self.walkRight[0], (self.circlePosX, self.playerPosY))
        if self.canavar:
            if self.a>1400 or self.a<1200:
                self.yon*=-1
            self.a += 2 * self.yon

    def fire_bullet(self,circlePosX,playerPosY):
        self.mermi_stage="fire"
        self.pencere.blit(self.mermi,(circlePosX+40,playerPosY+20))

    def kontrol(self):
        keys=pygame.key.get_pressed()
        if keys[pygame.K_SPACE]:
            if self.mermi_stage is "ready":
                self.mermi_x=self.circlePosX
                self.mermi_y=self.playerPosY
                self.fire_bullet(self.mermi_x,self.mermi_y)
                self.mermi_ses = pygame.mixer.Sound("laser.wav")
                self.mermi_ses.play()

        if self.mermi_stage is "fire":
            self.fire_bullet(self.mermi_x,self.mermi_y)
            self.mermi_x+=18
        if self.mermi_x>=1280:
            self.mermi_x=self.circlePosX
            self.mermi_stage="ready"

        self.pencere.blit(self.adam, (self.a, 685))

    def Game(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return "son"
        self.pencere.blit(self.bg, (0, 0))
        keys = pygame.key.get_pressed()
        if keys[pygame.K_RIGHT]:
            self.left = False
            self.right = True
            self.circlePosX += 5

        elif keys[pygame.K_LEFT]:
            self.left = True
            self.right = False
            self.circlePosX=-5


        if not (self.isJump):
            if keys[pygame.K_UP]:
                self.isJump = True
                self.left = False
                self.right = True
                self.walkCount = 0
                self.sayac += 1
        else:
            if self.jumpCount >= -10:
                self.playerPosY -= (self.jumpCount * abs(self.jumpCount)) * 0.5
                self.jumpCount -= 1
            else:
                self.jumpCount = 10
                self.isJump = False
        self.canavar=True
        self.move()
        self.kontrol()
        pygame.display.update()

Game = Oyun()
while True:
    Durum = Game.Game()
    if Durum == "son":
        break
EN

Stack Overflow用户

发布于 2020-09-18 10:57:02

一种简单的(但不是最有效的)方法是移动背景和所有其他资源,同时保持玩家不动。

代码语言:javascript
复制
# insert code in each object in background/assets
if right:
    OBJECT.right()  # code to change location
if left:
    OBJECT.left()  #code to change location

此外,离题,但更容易有一个单一的方向变量,其中-1代表左,0代表静止,1代表右。您也可以轻松地增加速度,所以请记住这一点,并在可能的情况下实现它。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62373289

复制
相关文章

相似问题

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