[英]Trying to make the blue square follow the red square, but it doesn't work
我正在嘗試制作一個程序,您可以在其中扮演一個紅色方塊,一個藍色方塊跟隨您。 很簡單,對吧? 是的,除了這是我第一次這樣做。
我聽說過 A*,但我想嘗試一種更簡單的方法,尤其是在這個例子中,藍色方塊沒有任何障礙來計算它周圍的 go。 它確實有效,但是,藍色方塊不能返回 go。 我不知道為什么。 藍色方塊的移動被放置在一個 function 中,這個 function 被放置在主游戲循環中的另一個 function 中。
import pygame,sys
import random
#window
width=1600
height=800
window=pygame.display.set_mode((width,height))
pygame.display.set_caption("simulation")
black=(0,0,0)
#red circle
redCircleCoords=(60, 60)
redCircleSize=(60, 60)
redCircle = pygame.Rect(redCircleCoords[0], redCircleCoords[1], redCircleSize[0], redCircleSize[1])
red=(255,0,0)
velRed=1
#blue circle
blueCircleCoords=(width-120, height-120)
blueCircleSize=(60,60)
blueCircle=pygame.Rect(blueCircleCoords[0], blueCircleCoords[1], blueCircleSize[0], blueCircleSize[1])
blue=(0,0,255)
velBlue=0.5
def redCircleMovement():
pressed=pygame.key.get_pressed()
if pressed[pygame.K_a] and redCircle.x > 0: #left
redCircle.x-=velRed
if pressed[pygame.K_d] and redCircle.x < width - 60: #right
redCircle.x+=velRed
if pressed[pygame.K_s] and redCircle.y < height - 60: #down
redCircle.y+=velRed
if pressed[pygame.K_w] and redCircle.y > 0: #up
redCircle.y-= velRed
def blueCircleMovement():
if redCircle.x > blueCircle.x:
blueCircle.x+=velBlue
if redCircle.x < blueCircle.x:
blueCircle.x-=velBlue
if redCircle.y > blueCircle.y:
blueCircle.y+=velBlue
if redCircle.y < blueCircle.y:
blueCircle.y-=velBlue
def draw():
redCircleVector=(redCircle.x, redCircle.y)
blueCircleVector=(blueCircle.x, blueCircle.y)
print('red:',redCircleVector)
print('blue:',blueCircleVector)
window.fill(black) #fill the screen with black
pygame.draw.rect(window, red, redCircle) #draw redCircle
pygame.draw.rect(window,blue,blueCircle) #draw blueCircle
pygame.display.flip() #update the display
def callFunctions():
draw()
redCircleMovement()
blueCircleMovement()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
callFunctions()
如果你沒有障礙,那么 A* 是沒有意義的,所以在那里打電話很好。
我不確切知道為什么您的代碼不起作用,但如果我是您,我會更改它以計算從藍色指向紅色的單位向量。 是這樣的:
def get_unit_vec(r_x, r_y, b_x, b_y):
x_diff = r_x - b_x
y_diff = r_y - b_y
magnitude = (x_diff ** 2 + y_diff ** 2) ** .5 # pythagoras
if magnitude == 0:
return 0, 0
return x_diff/magnitude, y_diff/magnitude
...
#updating position
unit_vec = get_unit_vec(redCircle.x, redCircle.y, blueCircle.x, blueCircle.y)
blueCircle.x += unit_vec[0] * velBlue
blueCircle.y += unit_vec[1] * velBlue
這可確保藍色圓圈始終沿紅色圓圈的確切方向移動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.