使用Pyglet和移动设置窗口的分辨率

问题描述 投票:0回答:1

我是新手在python中使用Pyglet并且我的代码有些问题。首先,我不知道为什么设置分辨率不起作用。其次,当我试图移动“蛇”时,它什么都不做。任何帮助表示赞赏。

import pyglet
import random

pyglet.resource.path = ["resources"]
pyglet.resource.reindex()


class Snake_Window(pyglet.window.Window):

    def __init__(self):
        super(Snake_Window, self).__init__()

        self.width = 1280
        self.height = 720
        # sets the resolution of window

        self.key_handler = pyglet.window.key.KeyStateHandler()
        self.push_handlers(self.key_handler)
        # sets keys

        self.set_caption("Wild Snake")
        # gives it a name

        self.background_image = pyglet.resource.image("background.png")
        self.food_image = pyglet.resource.image("food.png")
        self.snake_head_image = pyglet.resource.image("snake_head.png")
        self.snake_body_image = pyglet.resource.image("snake_body.png")
        # makes images usable

        self.center_image(self.food_image)
        self.center_image(self.snake_head_image)
        self.center_image(self.snake_body_image)
        # centers the images using center_image

        self.snake_head = pyglet.sprite.Sprite(img=self.snake_head_image, x=200, y=200)
        self.snake_head.scale = 0.5
        self.snake_head.rotation = 180

        self.snake_body = pyglet.sprite.Sprite(img=self.snake_body_image, x=400, y=200)
        self.snake_body.scale = 0.5
        self.snake_body.rotation = 180

        self.snake_head.draw()
        self.snake_body.draw()

        self.food = []

        self.c = self.snake_head.x
        self.a = self.snake_head.x
        self.b = self.snake_head.y

        pyglet.clock.schedule_interval(self.game_tick, 1)

    def center_image(self, image):
        # sets the center of the image to the actual center
        image.anchor_x = image.width / 2
        image.anchor_y = image.height / 2

    def update_snake_head(self):
        if self.key_handler[pyglet.window.key.RIGHT]:
            self.c = self.a
            self.c += 200
        elif self.key_handler[pyglet.window.key.LEFT]:
            self.c = self.a
            self.c -= 200
        elif self.key_handler[pyglet.window.key.UP]:
            self.c = self.b
            self.c += 200
        elif self.key_handler[pyglet.window.key.DOWN]:
            self.c = self.b
            self.c -= 200
        else:
            print("čau")

    def update_snake_body(self):
        if self.key_handler[pyglet.window.key.RIGHT]:
            self.c = self.a
            self.c += 200
        elif self.key_handler[pyglet.window.key.LEFT]:
            self.c = self.a
            self.c -= 200
        elif self.key_handler[pyglet.window.key.UP]:
            self.c = self.b
            self.c += 200
        elif self.key_handler[pyglet.window.key.DOWN]:
            self.c = self.b
            self.c -= 200
        else:
            print("čau")

    def game_tick(self, dt):
        self.update_snake_head()
        self.update_snake_body()
        self.draw_elements()

    def draw_elements(self):
        self.clear()
        self.snake_head.draw()
        self.snake_body.draw()

game_window = Snake_Window()

pyglet.app.run()
python class pyglet
1个回答
0
投票
import pyglet
import random

pyglet.resource.path = ["resources"]
pyglet.resource.reindex()

class Snake_Window(pyglet.window.Window):

    def __init__(self):
        super(Snake_Window, self).__init__(width=1280, height=720)

        # sets the resolution of window

        self.key_handler = pyglet.window.key.KeyStateHandler()
        self.push_handlers(self.key_handler)
        # sets keys

        self.set_caption("Wild Snake")
        # gives it a name

        self.background_image = pyglet.resource.image("background.png")
        self.food_image = pyglet.resource.image("food.png")
        self.snake_head_image = pyglet.resource.image("snake_head.png")
        self.snake_body_image = pyglet.resource.image("snake_body.png")

        # makes images usable

        self.center_image(self.food_image)
        self.center_image(self.snake_head_image)
        self.center_image(self.snake_body_image)
        # centers the images using center_image

        self.snake_head = pyglet.sprite.Sprite(img=self.snake_head_image, x=200, y=200)
        self.snake_head.scale = 0.5
        self.snake_head.rotation = 180

        self.snake_body = pyglet.sprite.Sprite(img=self.snake_body_image, x=400, y=200)
        self.snake_body.scale = 0.5
        self.snake_body.rotation = 180

        self.snake_head.draw()
        self.snake_body.draw()

        self.food = []

        self.snake_head.x = self.snake_head.x
        self.snake_head.y = self.snake_head.y

        pyglet.clock.schedule_interval(self.game_tick, 1)

    def center_image(self, image):
        # sets the center of the image to the actual center
        image.anchor_x = image.width / 2
        image.anchor_y = image.height / 2

    def update_snake_head(self):
        if self.key_handler[pyglet.window.key.RIGHT]:
            self.snake_head.x = self.snake_head.x
            self.snake_head.x += 200
        elif self.key_handler[pyglet.window.key.LEFT]:
            self.snake_head.x = self.snake_head.x
            self.snake_head.x -= 200
        elif self.key_handler[pyglet.window.key.UP]:
            self.snake_head.x = self.snake_head.y
            self.snake_head.x += 200
        elif self.key_handler[pyglet.window.key.DOWN]:
            self.snake_head.x = self.snake_head.y
            self.snake_head.x -= 200
        else:
            print("čau")

    def update_snake_body(self):
        if self.key_handler[pyglet.window.key.RIGHT]:
            self.snake_head.x = self.snake_head.x
            self.snake_head.x += 200
        elif self.key_handler[pyglet.window.key.LEFT]:
            self.snake_head.x = self.snake_head.x
            self.snake_head.x -= 200
        elif self.key_handler[pyglet.window.key.UP]:
            self.snake_head.x = self.snake_head.y
            self.snake_head.x += 200
        elif self.key_handler[pyglet.window.key.DOWN]:
            self.snake_head.x = self.snake_head.y
            self.snake_head.x -= 200
        else:
            print("čau")

    def game_tick(self, dt):
        self.update_snake_head()
        self.update_snake_body()
        self.draw_elements()

    def draw_elements(self):
        self.clear()
        self.snake_head.draw()
        self.snake_body.draw()

game_window = Snake_Window()

pyglet.app.run()

以下是如何解决这两个问题的方法。 第一个问题是宽度和高度是在创建窗口时定义的(之后可能还有一些方法可以改变它,以至于我还没有打扰学习)。

第二个问题是你更新self.c,例如self.snake_head.x的副本。所以当你认为你正在更新.xself.snake_head时,你实际上正在更新副本而已。

上面的代码解决了这个问题。例如,它不是完美的 - 按键不会在给定的间隔之前触发/更新。但这些是你在这个问题之后可能正在努力的事情。

© www.soinside.com 2019 - 2024. All rights reserved.