- Сообщений: 1274
- Спасибо получено: 1307
Восьмифреймовое движение [XP]
Гугл ничего толком не нагуглил, хотя тем, кому интересны движения по диагонали и расширенные (по позам, а не количеству фреймов) рекомендую обратить внимание на этот топик:
Eight Direction & More Frames
Впрочем, для нашего случая он не подходит, там, чтобы сделать как надо, ковырять код придется даже больше, чем без скрипта.
Итак, имеем вот такой чарсет на 8 кадров (старики и археологи сразу же узнают, откуда он):
Начинаем немного ковырять скрипты:
1) Создаем глобальную переменную в Main
2) Добавим параметр класса Game_Character
3) В классе Sprite_Character ставим на 28 строке
4) Если сделать только пункт 3 и запустить игру - то фреймы персонажа будут меняться медленно и использоваться только первые четыре, поэтому в классе Game_Character (Game_Character2) пишем:
Чтобы анимация не была медленной, в методе update_move этого же класса делаем так
Вот и всё, запускаем и наслаждаемся плавной анимацией Ваньки Малолесьева или какого-нибудь вашего крутого персонажа, состоящего из 8ми кадров.
PS: Благодаря советам Мертвого Эльфа сделал скрипт, который просто можно добавить в конце списка скриптов, но выше Main, а также немного параметризовал его.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
но для полного счастья надо замутить функцию SetFrameCount(map_id, event_id, framecount) ставящую конкретному событию число фреймов, чтобы можно было держать и такие, и такие чарсеты.
Кроме этого, вчера в процессе тестирования, понял, что
1.5 * (@frames_count / 4) и 1 * (@frames_count / 4) мало
пока стоят 1.8 и 1.3, но надопоэкспериментировать еще
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
К примеру, для 8 - это:
(1+@frames_count*0.1)*(@frames_count/4) для походки (walk)
((1+@frames_count/2*0.1)*(@frames_count/4) для ожидания (idle)
Тогда уж для полного счастья неплоха была бы и функция SetFrameRate(map_id,event_id,speed)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
ну и вторая функция полезна
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
я как-то пробовал (кажись в картах) делать в отдельном файле, но чето все печально было - не срастались они с оригиналом.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Наводишь мышь на список скриптов, ок?
Нажмешь Insert (на обычных клавах справа, над стрелками и левее нампада), верно?
Получаешь чистый лист, именуешь его как-то по-своему внизу слева под списком скриптов, а на чистом листе уже набиваешь полный скрипт.
Он будет выглядеть примерно так(можешь скопировать и доработать до ума):
$anim_count=4#изменит количество кадров для ВСЕХ(для отдельного перса - см. ниже)
class Game_Character
attr_accessor :frames_count
alias withoutmod_init initialize
def initialize
@frames_count=$anim_count
withoutmod_init
end
def set_frame_count(count)#нужно для удобства и для доступа к защищенной переменной
@frames_count=count
return
end
end
Ну и там прочее, прочее, надеюсь, все понятное))
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
шоцетакэ?
может потому я у себя и не смог, ибо тоже initialize ковырял
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Я давно заметил, что мы с тобой начинали учить Руби Мейкера с разных сторон. И вот этот диалог - отличный наглядный случай.
Ты правил стандартные скрипты. И правишь до сих пор. И даешь уроки, как их править и даже указываешь, где конкретно.
Я вчитывался в скрипты Ryex'a, Blizzard'a и других. И до сих пор вместо того, чтобы лезть менять стандартные скрипты, я на всякий случай использую алиасы (от alias), чтобы потом не искать, где и в чем у меня были проблемы в скриптах.
Руби, в отличие от С++/Pascal, позволяет добавлять в созданные классы сколь угодно огромное количество новых переменных, методов и изменять классы чуть ли не целиком и полностью, не меняя исходников.
Ответ на твой вопрос:
Оператор alias - это как раз одно из удобных средств для подобных действий. С его помощью внутри класса создается копия исходного метода, но под другим именем. То есть строка "alias some_other_name some_def" скопирует метод some_def и назовет его some_other_name.
Зачем это нужно?
Все просто - мы копируем в память исходный метод some_def. Затем переписываем его с нуля:
alias some_other_name some_def#вот мы делаем алиас
#вот мы начинаем писать метод с нуля:
def some_def
#здесь может быть все, что угодно
end
Затем, после внесения изменений запускаем тот метод, который у нас был сохранен изначально в качестве some_other_name, допустим, что теперь это выглядит так:
alias some_other_name some_def
def some_def
@value1=124
@value2='Oh my String!'
some_other_name# вот сюда
end
И все - теперь у тебя в методе этого класса при вызове будут созданы переменные @value1 и @value2. При этом исходный скрипт не меняется. Так работают почти все дополнительные скрипты, которые мы скачиваем для изменения меню/боевки/добавления фич.
Стоит отметить, чтобы моя помощь была совсем уж полной, что в исходном коде следует прочитать работу метода, который мы хотим изменить через алиас. В методах initialize почти во всех классах, связанных с графикой в конце вызывается метод refresh, относящийся к этому классу.
Допустим, наглядный вариант:
class Window_Base
def initialize
@x=x
@y=y
...
refresh
end
end
Это значит, что все, что ты хочешь добавить, должно быть перед вызовом метода refresh, иначе не факт, что ты увидишь эти изменения (или увидишь, но не сразу, что не есть хорошо). Поэтому при алиасе мы пишем:
def some_def
@value1='odin'#перед исходным методом
some_other_name
end
В остальных случаях можно писать наши изменения и после вызова исходного метода:
alias some_other_name some_def
def some_def
some_other_name
@value1='chto-to'
end
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
А я уже 6 лет с с++/с#, и руби не касался, потому для меня удивительно и непривычно, что можно с методами тут такое творить.
Мне как раз скоро предстоит кучу скриптов расковырять, буду теперь отдельно это делать.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Скрипт в первом сообщении под спойлером.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Какой-нибудь VidGif ( www.geovid.com/ru/vidGif ) - это чтобы конвертировать видео в gif-анимацию.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Теперь для событий можно задавать в комментарии число фреймов на его отображение, просто написав
[frames N], где N - число фреймов в чарсете
Срабатывает это на активной странице события.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- strelokhalfer
-
- Не в сети
- Живу я здесь
-
- Знатный грамотей
- Сообщений: 1640
- Спасибо получено: 1080
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
По ссыли демка
rghost.ru/45646217
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
victorscripts.wordpress.com/rpg-maker-vx...cripts/multi-frames/
Требует также для работы вот ето: victorscripts.wordpress.com/rpg-maker-vx...cripts/basic-module/
Оба скрипта ставим - проблему анимашек в эйсе решаем))
Это для ХР такого решения не было до Пещерного.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
