Изометрическая формула выбора плитки немного не соответствует - PullRequest
2 голосов
/ 23 октября 2019

Я почти заставил формулу выбора изометрической плитки работать, но она, кажется, немного отключена: http://prntscr.com/pn3gbv

Кажется, она работает правильно, когда мышь наводится на первую половину плитки, но она прыгаетк следующей плитке, когда мышь перемещается во вторую половину: http://prntscr.com/pn3hpx
( здесь видео, показывающее проблему) .

Это также нене учитывать камеру, и я не знаю, как это реализовать. Так что некоторая помощь в этом тоже будет признательна.

Ниже приведен соответствующий используемый код, а - это минимальный исполняемый пример , а также используемый ресурс изображения:

path.png

import pyglet

tile_width_half = 84/2
tile_height_half = 51/2

class Game(pyglet.window.Window):
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.island = Island()
        self.camera = Camera()
        self.selection = pyglet.sprite.Sprite(pyglet.image.load("path.png"))
    def on_mouse_motion(self, x, y, dx, dy):
        global tile_height_half,tile_width_half
        j = int((x / tile_width_half + y / tile_height_half) / 2)
        i = int((y / tile_height_half - x / tile_width_half) / 2)
        self.selection.x = (j-i)*tile_width_half
        self.selection.y = (j+i)*tile_height_half
    def on_draw(self):
        self.clear()
        self.island.draw()
        self.selection.draw()
    def on_key_press(self, symbol, modifiers):
        if symbol == key.A:
            self.camera.left = True
        if symbol == key.W:
            self.camera.up = True
        if symbol == key.D:
            self.camera.right = True
        if symbol == key.S:
            self.camera.down = True
        if symbol == key.ESCAPE:
            pyglet.app.exit()
    def on_key_release(self, symbol, modifiers):
        if symbol == key.A:
            self.camera.left = False
        if symbol == key.W:
            self.camera.up = False
        if symbol == key.D:
            self.camera.right = False
        if symbol == key.S:
            self.camera.down = False
    def update(self,dt):
        for tile in self.island.all_sprites:
            tile.x += self.camera.position[0]
            tile.y += self.camera.position[1]
        self.camera.move()


if __name__ == '__main__':
    game = Game(800,600,"title")
    pyglet.clock.schedule_interval(game.update,1/60)

    pyglet.app.run()
...