Крутим картинку вокруг своей оси, улучшеный переработанный код

  1. 0 DEG
  2. ###загрузка нашей картинки 16*16, рисование экрана ожидания загрузки графики
  3. 10 GELLOAD "a","icon.png":DRAWSTRING "ЗАГРУЗКА",80,50:DRAWSTRING "Подождите пока картинка",1,100:drawstring"дойдет до края",1,120:drawstring"Naik(c)",1,150
  4. ###вырезаем нарисованый экран загрузки в картинку, преобразование в спрайт и вывод на экран, теперь все рисуется под этим фоном кроме других спрайтов
  5. 11 GELGRAB "delay",0,0,240,320:SPRITEGEL "delay","delay":SPRITEMOVE "delay",0,0
  6. ###создаем спрайт индикатора загрузки
  7. 15 SPRITEGEL "bar","a"
  8. ###рисуем картинку которую будем вращать. Она нарисовалась под нашим фоном
  9. 20 DRAWGEL "a",0,0
  10. ###будем вращать нашу картинку каждый раз на 4 градуса, поэтому создаем массивы значений синусов и косинусов емкостью 360/4=90
  11. 70 DIM S(90):DIM C(90):K%=0
  12. 75 FOR W%=0 TO 89
  13. 80 S(W%)=SIN(K%):C(W%)=COS(K%):K%=K%+4
  14. 90 NEXT W%
  15. ###обновляем переменную К%, рисуем круг для затирания уже созданной картинки, дабы предотвратить наложение друг на друга
  16. 92 K%=0
  17. 95 FILLROUNDRECT 75,75,60,60,360,360
  18. ###далее в цикле проходим по пикселям нашей картинки, находим новые координаты по формулам
  19. 100 FOR J%=0 TO GELHEIGHT("a")-1
  20. 105 FOR I%=0 TO GELWIDTH("a")-1
  21. 110 BLIT I%,J%,1,1,(I%-8)*X-(J%-8)*Y+105,(I%-8)*Y+(J%-8)*X+105
  22. 120 NEXT I%
  23. 130 NEXT J%
  24. ###копируем созданную под экраном загрузки перевернутую картинку на 4 градуса, всего их в цикле создастся 90, у всех имена соответствуют их порядковому номеру
  25. 135 GELGRAB STR$(K%),90,90,30,30
  26. ###увеличиваем счетчик цикла, если уже создалось 90 изобразжений, переходим на строку 200
  27. 140 K%=K%+1:IF K%>89 THEN GOTO 200
  28. ###присваиваем переменным Х и У значение косинуса и синуса из наших массивов созданных ранее, выводим поверх фона индикатор загрузки
  29. 150 X=C(K%):Y=S(K%):SPRITEMOVE "bar",240/90*K%,0
  30. 160 GOTO 95
  31. ###убираем фон и индикатор загрузки за пределы экрана, очищаем экран
  32. 200 SPRITEMOVE "delay",-999,-999:SPRITEMOVE "bar",-50,-50:CLS
  33. ###теперь в цикле по очереди выводим созданные картинки, в результате мы видим поворот на 360 градусов. Регулируя значение SLEEP можно выбрать нужную скорость вращения
  34. 205 FOR I%=0 TO 89
  35. 210 DRAWGEL STR$(I%),90,90:SLEEP 50
  36. 220 NEXT I%
  37. ###переходим назад, поворачиваем "вечно"
  38. 230 GOTO 205
Чем больше картинка, тем на больший угол надо крутить за один раз, так как ресурсов много требует

Реклама

Мы в соцсетях

tw tg yt gt