Сообщество скриптеров (Академия)

Организатор конкурсов
Больше
15 года 7 мес. назад #36070 от dark32

James пишет: И ещё: мне нужно сделать проверку, помещается ли некоторая строка в битмап - т.е., без сжатия. Как это реализовать?


Возьми длину строки и умножь её на некоторую константу и срани с размером, которую находи примерно так bitmap.text_size("Ф") или сразу bitmap.text_size(от всей строки)

Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 7 мес. назад - 15 года 7 мес. назад #36154 от srg91
Приветствую! Хотел бы попросить вашей помощи.
Я создал новый класс, например NewClass и мне нужно добавить строку его создания в стандартный класс Scene_Title. Возможно ли это сделать, не изменяя саму Scene_Title?

Создаю класс в стандартном Scene_Title:
Code:
class Scene_Title ... def command_new_game ... $new_class = NewClass.new ... end ... end
Последнее редактирование: 15 года 7 мес. назад пользователем srg91.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 7 мес. назад - 15 года 7 мес. назад #36161 от dark32
Попробуй так:
Code:
class Scene_Title alias command_new_game_old command_new_game def command_new_game command_new_game_old $new_class = NewClass.new end end

Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Последнее редактирование: 15 года 7 мес. назад пользователем dark32.
Спасибо сказали: srg91

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 7 мес. назад #36164 от srg91
о, все работает, спасибо!
Но вот появился вопрос, а если функция передается с параметром, как тут выкрутится?

Ex.
Code:
class Scene_Save ... def write_save_data(file) ... Marshal.dump($player_items, file) ... end ... end

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 7 мес. назад - 15 года 7 мес. назад #36165 от dark32
Code:
class Scene_Save alias write_save_data_old write_save_data def write_save_data(file) write_save_data_old(file) Marshal.dump($player_items, file) end end

Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Последнее редактирование: 15 года 7 мес. назад пользователем Fizmatik. Причина: проверка подсветки
Спасибо сказали: srg91

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад #36750 от James
Есть код:
Code:
class Array def indequal(q) result=[] i=0 until i>=self.size i+=self[(i+1)..self.size].index(q) unless i==nil result.push(i) else i=self.size+1 end end return result end end

По идее, при обработке массива он должен вернуть другой массив, состоящий из номеров позиций элементов, равных q. Например, после работы с массивом
Code:
[0,1,1,11,10,110,21,1,0,11,0,1,12].indequal(1)
Мы должны получить массив [1,2,7,11], но вместо того, чтобы выдать этот результат, скрипт зависает. Что я делаю не так?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад #36754 от James
Написал другой вариант:
Code:
class Array def indequal(q) result=[] for i in 0..(self.size-1) result.push(i) if self[i]==q end return result end end

Он проще, но полный перебор... :unsure: Нерационально...
Может, всё же как-то возможно исправить первый вариант?
Хотя, может он памяти больше занимает - кто знает, как работает метод .index.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад #36758 от James
И вдогонку вопрос:

Есть массив A, каждый элемент которого также массив из двух элементов ([[q,2],[w,3],[e,999] и так далее]). Есть одномерный массив B.

Надо приплюсовать к A B таким образом, чтобы в итоге получилось q,2],[w,3],[e,999],[b[0],0][b[1],0][b[2],0]...[b[n],0.
То есть, к массиву A добавляется массив из двух элементов, нулевой из которых равен какому-то элементу массива В, а первый - всегда ноль. Как такое можно реализовать?

Самый очевидный способ - использовать цикл (for i in 0..(b.size-1) A.push([b,0]) end), но может быть есть какой-то другой способ?

P.S. Просто ранее я использовал одномерный массив А и добавлял к нему массив В тупо сложением.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 6 мес. назад - 15 года 6 мес. назад #36761 от dark32
James, ты какие языки программирования знаешь? А то твои коды похожи на Паскалевские - всё сложно, муторно и в придачу работает не так как надо. (сам знаю Паскаль, знаю как на нём работать)

Извини, я честно не понял как работает первый скрипт, который не работает.
Второй - больно долго будет обрабатывать
Но я всё же написал свой скрипт, кажись он работает. Проверяй
Code:
class Array def indequal(q) arr = self.clone result=[] loop {ind=arr.index(q) if ind result<<ind; arr[ind]=nil else break end} return result end end
push(i) и <<i одно и тоже.

Теперь про вопрос в догонку...
Странно... на ум не чего не идёт, думаю начну от предложенного тобой метода и пойду в свой метод. Посмотрим что выйдет
7 минут спустя
мда... вышло конечно не очень, но работает на ура...
вначале хотел сдлелать как ты предложил, но потом заметил что ты написал про сложение и я решил сделать так.
сперва меняем наш одномерный массив, потом складываем с двумерным
Code:
class Array def daplma(arr)# Dual Array PLus Mono Array self+arr.map{|i|[i,0]} end end
может можно и проще или быстрее, но я уже не знаю как...

Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Последнее редактирование: 15 года 6 мес. назад пользователем dark32.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад #36762 от James

James, ты какие языки программирования знаешь?

Паскаль и знаю.

Извини, я честно не понял как работает первый скрипт, который не работает.

Я планировал сделать так: с помощью index(q) ищется первый элемент, равный q и его номер заносится в i. Потом в массиве начиная с i-го элемента по конечный используется опять index(q).

Но я всё же написал свой скрипт, кажись он работает. Проверяй

Кажется, работает.

Кстати, вопрос:
Code:
if ind
Как это работает, если ind не может быть равно true или false? Или в этом случае true возвращается, когда ind не равно nil?

Теперь по поводу второго кода.
В Array загонять не годится, наверное - я не намерен использовать это ещё где либо. Хотя, вариант приемлемый.

Кстати, а можешь объяснить, как это работает? В частности arr.map{|i|[i,0]}. В итераторах я пока вообще ничего не понимаю и понять пока не удалось.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 6 мес. назад #36763 от dark32
if <что угодно>
если <что угодно> существует то истина( если <что угодно> не равно ложь) - это особенность Руби.

В Array загонять не годится, наверное - я не намерен использовать это ещё где либо. Хотя, вариант приемлемый.

ну так просто помести этот код без класса Array в свой класс (или куда ещё), правда придётся слегка его поправить, если нужен буден он как метод.
Code:
def daplma(da,ma)# Dual Array PLus Mono Array da + ma.map{|i|[i,0]} end
Code:
arr.map{|i|[i,0]}
примерно равносильно
Code:
def arr_hz(arr) #arr - Some Mono Array arr=arr.clone for i in 0...arr.size # 3 точки! или для двух точек (arr.size-1) arr[i]=[arr[i],0] end return arr end

Итератор .map - очень злой итератор(злее его только .map! и .delete_if)
Так, теперь что он делает: он проходится по каждому элементу массива и изменяет его согласно неким правилам записных в фигурных скобках, в нашем случае правило такое [i,0], где i - текущий элемент массива (не индекс! не нравится i, можешь заменить его на что хочешь, но только в пределах скобок). В результате возвращает новый массив изменённый по правилам.
.map! - тоже самое, но как говорит нам ! - изменяет сам массив

Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад - 15 года 6 мес. назад #36765 от James
Вопрос: Приемлемо ли такое:
Code:
def instant_thought(cont,duration=(St_Letter_Duration)*cont.size)
, где St_Letter_Duration - константа?
Последнее редактирование: 15 года 6 мес. назад пользователем James.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад #36827 от James
Есть код:
Code:
case conts.class when Array <Какой-то код 1> when String <Какой-то код 2> end
Но не выполняется ни код 1, ни код 2. Причём, я проверял, что класс - Array (Или String).

Почему так?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 6 мес. назад - 15 года 6 мес. назад #36828 от dark32
ни чё не понимаю. В теории ошибки нет, но на практике даже чистый Руби не работает...
Скажи цель этого выбора, я заставлю его работать.

бред.. бред... бред... но работает...
Code:
conts=['88'] case conts when Array p "arr" when String p "str" else p conts.class end

Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Последнее редактирование: 15 года 6 мес. назад пользователем dark32.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад - 15 года 6 мес. назад #36829 от James
Я уже разобрался:
Code:
case (conts.class).to_s when "Array" код 1 when "String" код 2 end
Последнее редактирование: 15 года 6 мес. назад пользователем James.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 6 мес. назад #36831 от dark32
Оригинально, это тоже работает, но... это не оптимально, строка занимает места больше в памяти, а .class как бы не должна.
Да и моё решение выглядит красивше.

Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад - 15 года 6 мес. назад #36835 от James
Есть код (Ногами не бейте):
Code:
def update_chain for i in 0...@chain.size if i>0 if (@chain[i-1].opacity>128) and (not @chain_[i-1]) @chain[i].opacity+=255/St_thought_Appear_Duration @chain_[i]=true if @chain[i].opacity==255 end else @chain[i].opacity+=255/St_thought_Appear_Duration unless @chain_[i] end @chain[i].opacity-=255/St_thought_Disappear_Duration if @chain_[i] @chain[i].dispose if (@chain[i].opacity==0) and (not @chain_[i]) end @chain=@chain.compact end def quickchain(conts, x, y, xshift, yshift) @chain=[] for i in 0...conts.size @chain[i]=Sprite.new rect=conts[i].t_size @chain[i].bitmap=Bitmap.new(rects.width,rects.height) if i>0 @chain[i].x=@chain[i-1]+xshift @chain[i].y=@chain[i-1]+yshift else @chain[i].x=x @chain[i].y=y end @chain[i].z=500 @chain[i].x=0 if @chain[i].x+@chain[i].bitmap.width @chain[i].y=0 if @chain[i].y+@chain[i].bitmap.height @chain[i].opacity=0 @chain_[i]=false end end

По идее, он должен по очереди показывать текст. Но при попытке задать ему
Code:
thoughts.quickchain(["h=vt+(gt^2)/2","a=b*c","Hello, World!","x","a^2=b^2+c^2-2bc*cos A"], 100,100,32,40)
Оно мне пишет "SyntaxError occured while running script"

Почему такое?
И ещё, как можно сделать этот скрипт покрасивее? :)
UPD
А, не, всё в порядке. Тупо в эвенте неправильно скрипт прописал. Перенёс запятую на следующую строчку
Последнее редактирование: 15 года 6 мес. назад пользователем James.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад - 15 года 6 мес. назад #36889 от James
Определяю размеры строки методом bitmap.text_size
На строку "a^2=b^2+c^2-2bc*cos A" выдаёт ширину 201. Но когда я пытаюсь впихнуть эту строку в битмап такой ширины, то строка сжимается.

От чего такое может быть?
Последнее редактирование: 15 года 6 мес. назад пользователем James.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 6 мес. назад #36890 от dark32
почему так - не знаю,
попробуй подобрать минимальную ширину при которой не сжимается, потом изменить длину текста и повторить, может это .text_size халтурит.

Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад - 15 года 6 мес. назад #36891 от James
Ставлю 202 - и уже нормально. Видимо, это так работает - нужно взять на 1 пиксель больше, чем задаёт .text_size. Ненормально, конечно...

Ведь вроде бы text_size должен выдавать Rect, который можно сразу же использовать в draw_text, но нет, приходится на один пиксель брать больше. Правда, с более короткими строками всё было в порядке...

Оффтоп:
ВНИМАНИЕ: Спойлер!
Последнее редактирование: 15 года 6 мес. назад пользователем James.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.166 секунд
Работает на Kunena форум