Merhaba ben pythonda pygame modülünü kullanarak bir oyun yapıyorum ve de bir karakterim var fakat bir kısımda takıldım. tuşlar ile karakteri haraket ettirerek ekranda belirli bir alana gelip ve e tuşuna basınca benim değişkenim True olsun mesela x = 200 ile x = 600 arası ve y= 100 ile y= 200 arası bir alana gelip e tuşuna basacak ve e adlı değişken true olacak bunu nasıl yapabilirim
şuan soyut kalmış olabilir kafanızda
Çarpışma kontrolü rutinlerini uygulamayı deneyebilirsiniz.
Collision Detection in PyGame - GeeksforGeeks
Verdiğiniz sınırların içine geldiğinde true değeri verir. Siz de bu noktada tuşa basıldığında ve bu alanda bulunulma durumu true ise değişkeninize ilgili değerinizi atarsınız.
Bir kod verirseniz üzerinde de gerçekleyebiliriz.
pygame.Rect — pygame v2.4.0 documentation
Üzerinde çarpışma tespiti için ilgili rutinleri bulabilirsiniz.
Merhaba.
Bahsini ettiğiniz durum için aşağıdaki örneği inceleyebilirsiniz.
import pygame
from random import randint
resolution = (800, 800)
screen = pygame.display.set_mode(resolution)
clock = pygame.time.Clock()
# Oyuncu için oluşturulan sınıf.
class Player:
def __init__(self, x, y, color):
self.x = x
self.y = y
self.width = 100
self.height = 100
self.color = color
def draw(self):
geometry = (self.x, self.y, self.width, self.height)
pygame.draw.rect(screen, self.color, geometry)
# Söz konusu alan için oluşturulan sınıf.
class Area:
def __init__(self, geometry, color):
self.geometry = geometry
self.color = color
def draw(self):
pygame.draw.rect(screen, self.color, self.geometry)
# Alanın rengini rastgele bir renk ile değiştirdiğimiz fonksiyon.
def change_color(self):
r = randint(100, 255)
g = randint(100, 255)
b = randint(100, 255)
self.color = (r, g, b)
# İki dikdörtgen arasında çarpışma olup olmadığını kontrol ettiğimiz fonksiyon.
def check_collision():
x1, y1 = player.x, player.y
w1, h1 = player.width, player.height
x2, y2, w2, h2 = area.geometry
# w: width (genişlik), h: height (yükseklik)
if (x1 < x2 + w2 and
x2 < x1 + w1 and
y1 < y2 + h2 and
y2 < y1 + h1):
print("collision!")
return True
else:
return False
player = Player(x=50, y=50, color=(255, 255, 255))
area = Area(geometry=(300, 300, 200, 200), color=(100, 100, 100))
while True:
# Maksimum FPS değerini 60'a eşitleyelim.
clock.tick(60)
# Ekranı siyaha boyayalım.
screen.fill((0, 0, 0))
# Fare koordinatlarını alalım.
mouse_x, mouse_y = pygame.mouse.get_pos()
# Oyuncunun pozisyonunu fare koordinatlarına göre ortalayalım.
player.x = mouse_x - (player.width / 2)
player.y = mouse_y - (player.height / 2)
# Alanı, ardından da oyuncuyu çizelim.
area.draw()
player.draw()
# Ekranı güncelleyelim.
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
# Alanın içerisine girdiğimizde basacağımız tuş, "E".
if event.key == pygame.K_e:
# Oyuncunun alan içerisine girip girmediğini kontrol edelim.
if check_collision() is True:
# Oyuncu alan içerisine girmişse ve "E" tuşuna basılmışsa,
# Alanın rengini değiştir.
area.change_color()
Karakterinizin ve söz konusu alanın geometrisine uygun bir şekilde, herhangi bir çarpışmanın var olup olmadığını kontrol edebilirsiniz. İnternet üzerinde pek çok farklı durum için geliştirilmiş pek çok algoritma mevcut. Yukarıda yer alan örnekte, hem oyuncunun hem de alanın dikdörtgensel bir şekle sahip olduğunu varsayarak, ona göre bir çözüm uyguladım. Yorum satırları ile yapmış olduğum açıklamaların yeterli olacağını umut ediyorum. İyi çalışmalar.