Проблема в том, что если @hBullets
имеет 10 элементов, @hBullets.count
будет выводить 10
, но @hBullets[10]
не будет работать, поскольку индекс массива начинается с 0
, а не с 1
.Десятый элемент будет в @hBullets[9]
.Вы получаете сообщение об ошибке, потому что элемент, к которому вы пытаетесь обратиться, - nil
, а не потому, что «attr_accessor не читается».
При этом Ruby предлагает гораздо более простые способы итерации по массиву.Я бы переписал ваш код следующим образом:
def fire_arrow(y)
@hBullets.each do |bullet|
bullet.active = true if bullet.y == y
end
end
Другая проблема с вашим кодом заключается в том, что вы инициализируете новый массив следующим образом:
@hBullets = Array.new(25)
Это создает массив с 25 элементами, которыевсе nil
.Вместо этого вы должны начать с пустого массива:
@hBullets = Array.new
Или:
@hBullets = []