こんにちは、私はアーケード ゲームの小惑星をプログラムしようとしています。ユーザーがスペースバーを押すと、「船」が現在配置されている場所に円が作成され、その位置が「ball_list」に追加され、船の水平速度と垂直速度は示されているように、「ball_vlist」に新しい円の速度として保存されます
def draw(canvas):
global ship_pos, ship_vel, ball_list
if current_key=='32': # if spacebar is pressed
ball_list.append(ship_pos) # create a new circle and store is position
ball_vlist.append(ship_vel) # add a velocity to this new circle
プログラム全体を実行すると、予想どおり、船は最初に指定した速度で移動します。ただし、スペースバーを押すと速度が上がりますが、その理由はわかりません。この行が問題を引き起こしていることがわかりました:
ball_list.append(ship_pos)
コメントアウトすると、スペースバーが押されたときに船が正常に続行されるためです。アペンドは何らかの形で船の位置を変えていますか? 船が加速しても船の速度(ship_vel)が一定であることを確認しました。
助けてくれてありがとう!追加のコンテキストが必要な場合は、プログラム全体を次に示します。
import simplegui
ball_list = []
ball_vlist = []
ship_pos = [200, 400]
ship_vel = [.5, -.5]
current_key=' '
frame = simplegui.create_frame("Asteroids", 800, 500)
def tick():
global ball_list, ball_vlist, ship_pos
# update the ship position
ship_pos[0] += ship_vel[0]
ship_pos[1] += ship_vel[1]
# update the ball positions
for i in range(len(ball_list)):
ball_list[i][0]+=ball_vlist[i][0]
ball_list[i][1]+=ball_vlist[i][1]
def draw(canvas):
global ship_pos, ship_vel, ball_list
if current_key=='32':
ball_list.append(ship_pos)
ball_vlist.append(ship_vel)
for ball_pos in ball_list:
canvas.draw_circle(ball_pos, 1, 1, "white", "white") # these are the circles the ship shoots
canvas.draw_circle(ship_pos, 4, 1, "red", "green") # this is my 'ship' (just to test)
def keydown(key):
global current_key
current_key = str(key)
def keyup(key):
global current_key
current_key=' '
timer = simplegui.create_timer(10, tick)
frame.set_keydown_handler(keydown)
frame.set_keyup_handler(keyup)
frame.set_draw_handler(draw)
frame.start()
timer.start()