ソースを参照

fixed bug in Scene.set_position()

Zero! Studio 1 年間 前
コミット
b0124a73cf
3 ファイル変更19 行追加9 行削除
  1. 5 7
      jogai/character.py
  2. 10 1
      jogai/scene.py
  3. 4 1
      scripts/basics.py

+ 5 - 7
jogai/character.py

@@ -195,13 +195,11 @@ class Character(pygame.sprite.Sprite):
 
         if not key or _get_keys()[utils.eval_key(key)]:
             if relative:
-                self.x += x
-                self.y += y
-                self.velocity.x = x
-                self.velocity.y = y
+                updated_x, updated_y = self.x + x, self.y + y
             else:
-                self.x = x
-                self.y = y
+                updated_x, updated_y = x, y
+
+            self.x, self.y = updated_x, updated_y
 
     def move_to(self, x: int, y: int, key: str = ''):
         """
@@ -716,7 +714,7 @@ class Character(pygame.sprite.Sprite):
             offset_rect = self.rect
             x, y = self.x, self.y
         if tracking:
-            if self.x < settings.WINDOW_WIDTH // 2:
+            if x < settings.WINDOW_WIDTH // 2:
                 offset_rect.x = x
             elif (
                 settings.WINDOW_WIDTH // 2

+ 10 - 1
jogai/scene.py

@@ -106,4 +106,13 @@ class Scene:
 
         # Set x in range to prevent the scene from being outside the window.
         # The minus sign is essential to correctly position the scene.
-        self.rect.x = -min(max(0, x), self.rect.width - settings.WINDOW_WIDTH)
+        if x < settings.WINDOW_WIDTH // 2:
+            self.rect.x = 0
+        elif (
+            settings.WINDOW_WIDTH // 2
+            < x
+            < self.rect.width - settings.WINDOW_WIDTH
+        ):
+            self.rect.x = -x + settings.WINDOW_WIDTH // 2
+        else:
+            self.rect.x = -self.rect.width + settings.WINDOW_WIDTH

+ 4 - 1
scripts/basics.py

@@ -1,4 +1,5 @@
 from jogai import *
+from jogai.utils import _get_keys, eval_key
 
 
 def test_example01():
@@ -8,4 +9,6 @@ def test_example01():
 
     while is_running():
         update()
-        print(protagonist._calculate_collisions(0, 0))
+        #print(protagonist.calculate_collisions((0, 0)))
+        if _get_keys()[eval_key('o')]:
+            protagonist.move_to(sq.sprites()[0].x, sq.sprites()[0].y)