Nov-14-2017, 02:06 PM
Found no solution to tkinter annoying keypress. Just compare tkinter vs pysfml.
Here pysfml example. I would recommend pygame because of better docs.
Here pysfml example. I would recommend pygame because of better docs.
from sfml import sf class Bullet: def __init__(self, x, y, color, movement): self.bullet = sf.CircleShape(3, 18) self.bullet.position = x, y self.bullet.fill_color = color self.movement = movement def move(self, speed): vector = (self.movement[0] * speed + self.bullet.position.x, self.movement[1] * speed + self.bullet.position.y) self.bullet.position = vector class App: def __init__(self): self.window = sf.RenderWindow(sf.VideoMode(600, 400), "Invaders") self.bullets = [] self.create_ship(300, 370, sf.Color(0,0,200)) def create_ship(self, x, y, color): self.ship = sf.ConvexShape(3) self.ship.set_point(0, (0, 0)) self.ship.set_point(1, (-20, 30)) self.ship.set_point(2, ( 20, 30)) self.ship.fill_color = color self.ship.position = x, y def loop(self): clock = sf.Clock() bullet_clock = sf.Clock() while self.window.is_open: for event in self.window.events: if event.type == sf.Event.CLOSED: self.window.close() elif event.type == sf.Event.KEY_PRESSED: if sf.Keyboard.is_key_pressed(sf.Keyboard.ESCAPE): self.window.close() # create bullets if sf.Keyboard.is_key_pressed(sf.Keyboard.SPACE): # keeps bullet at steady intervals if bullet_clock.elapsed_time.milliseconds > 300: bullet_clock.restart() vector = self.ship.position self.bullets.append(Bullet(vector.x, vector.y, sf.Color(0,0,200), (0,-2))) # movement, speed keeps movement steady speed = 100 * clock.elapsed_time.seconds if sf.Keyboard.is_key_pressed(sf.Keyboard.LEFT): self.ship.move((-speed, 0)) elif sf.Keyboard.is_key_pressed(sf.Keyboard.RIGHT): self.ship.move((speed, 0)) elif sf.Keyboard.is_key_pressed(sf.Keyboard.UP): self.ship.move((0, -speed)) elif sf.Keyboard.is_key_pressed(sf.Keyboard.DOWN): self.ship.move((0, speed)) self.window.clear() # draw bullets bullet_remove = [] for enum, bullet in enumerate(self.bullets): if bullet.bullet.position.y < 0: bullet_remove.append(enum) else: bullet.move(speed) self.window.draw(bullet.bullet) for enum, index in enumerate(bullet_remove): self.bullets.pop(index - enum) self.window.draw(self.ship) self.window.display() clock.restart() sf.sleep(sf.milliseconds(5)) def main(): app = App() app.loop() if __name__ == '__main__': main()
99 percent of computer problems exists between chair and keyboard.