2013-10-12 13 views
5

Đoạn mã sau đây từ hướng dẫn này: http://www.raywenderlich.com/24252/beginning-game-programming-for-teens-with-pythonLàm thế nào để sửa chữa một: Loại lỗi 'tuple' đối tượng không hỗ trợ phân mục

for badguy in badguys: 
     if badguy[0]<-64: 
      badguys.pop(index) 
     badguy[0]-=7 
     index+=1 
    for badguy in badguys: 
     screen.blit(badguyimg, badguy) 

được đem lại cho tôi một:

TypeError: 'tuple' object does not support item assignment

Tôi hiểu rằng điều này có thể là do sử dụng badguy là một bộ tuple. Điều này có nghĩa nó là bất biến (bạn không thể thay đổi giá trị của nó) Ive thử như sau:

t= list(badguy) 
     t[0]= t[0]-7 
     i+=1 

tôi chuyển đổi các tuple đến một danh sách để chúng ta có thể trừ đi 7. Nhưng trong trò chơi không có gì xảy ra.

Có ai biết tôi có thể làm gì không?

Cảm ơn.

Trả lời

17

Thay đổi này

badguy[0]-=7 

vào này

badguy = list(badguy) 
badguy[0]-=7 
badguy = tuple(badguy) 

Ngoài ra, nếu bạn có thể để badguy như một list, sau đó thậm chí không sử dụng các bộ và bạn sẽ bị phạt với mã hiện tại của bạn (với thay đổi thêm về việc sử dụng danh sách thay vì bộ dữ liệu)

+0

Im không có chuyển động trong trò chơi của tôi, với những thay đổi đó –

+0

@ Chuyên ngữ: Sau đó, bạn có các vấn đề khác. Giải pháp tôi đề xuất sẽ giải quyết vấn đề 'tuple' của bạn. Nếu bạn có một vấn đề khác, tôi khuyên bạn nên tạo một bài đăng khác – inspectorG4dget

+0

được rồi, cảm ơn sự trợ giúp của bạn cho đến thời điểm này :-) –

1

Một giải pháp khác thay vì

badguy[0] -= 7 

làm

badguy = (badguy[0] - 7,) + badguy[1:] 

này tạo ra một tuple mới hoàn toàn với giá trị được cập nhật trong các yếu tố 0.

Các vấn đề liên quan