Да, и впрямь что-то четвертое задание затянулось. Мой вариант решения:
СпойлерНе отписавшимся участникам не смотреть!:
СпойлерВы уверены, что хотите заглянуть под спойлер?:
СпойлерА если подумать?:
СпойлерА если хорошо подумать?!:
СпойлерНу, ладно, щелкай...:
Код:
# Вставляем перед Main
begin
# Константа, содержащая количество кадров
@FramesCount = 8
# Задаем новую частоту обновления экрана
# (первый вариант управления скоростью анимации)
# Graphics.frame_rate = 10
# Создаем изображение, в пути указываем свой путь, не забывая экранировать слэши
@bitmap = Bitmap.new("D:\\Games\\RPGMakerXP\\Projects\\Scripts\\Source\\framerate.PNG")
# Получаем размеры кадра
@frameWidth = @bitmap.width / @FramesCount
@frameHeight = @bitmap.height
# Определяем положение экрана
# Здесь должна была быть WinAPI функция для определения размеров экрана,
# но это уже тема другого задания
@spriteX = 320 - @frameWidth / 2
@spriteY = 240 - @frameHeight / 2
# Создаем область просмотра
@viewport = Viewport.new(@spriteX, @spriteY, @frameWidth, @frameHeight)
# Создаем новый спрайт с указанием области просмотра
@sprite = Sprite.new(@viewport)
# Присваиваем изображение спрайту
@sprite.bitmap = @bitmap
# Запускаем бесконечный цикл (вроде, был do, но я давно не писал)
# Это вместо использования встроенных циклов сцены
while (true)
# Цикл от 0-го кадра до последнего
for i in 0...@FramesCount
# Задаем смещение по оси X для области просмотра,
# равное номеру кадра, умноженное на ширину кадра
@sprite.viewport.ox = @frameWidth * i
# Обновляем экран
Graphics.update
# Ждем 0.1 секунды
# (второй вариант управления скоростью анимации)
sleep(0.1)
end
end
end
Я тут, кстати, немного опростоволосился (ну, давно не писал, давно ) и оба представленных способа управления скоростью анимации использовать в настоящих проектах не рекомендуется. Вместо этого используйте метод delay, реализованный в скрипте Space постом выше.
---
Добавлено после морального шока: нет, не используйте метод Space, он чешет правой ногой левое ухо.
СпойлерВы действительно хотите узнать страшную тайну?:
Space, тебе не кажется, что, если нужно просто посчитать кадры, то для этого вполне подойдет обычный цикл?
Код:
def delay(frames)
for i in 0...frames
Graphics.update
end
end
Зачем юзать страшный Graphics.frame_count?! Интерпретатору легче сосчитать циферки от 0 до 20, чем от 95195121218 до 95195121238
Последний раз редактировалось Equilibrium Keeper; 07.07.2011 в 22:15.
Социальные закладки