Войти на сайт

Авторизация, ждите ...
×

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

Сообщество скриптеров (Академия) 14 года 4 нед. назад #36070

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
James пишет:
И ещё: мне нужно сделать проверку, помещается ли некоторая строка в битмап - т.е., без сжатия. Как это реализовать?

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

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

Сообщество скриптеров (Академия) 14 года 3 нед. назад #36154

  • srg91
  • srg91 аватар
  • Вне сайта
  • Путник
  • Сообщений: 7
  • Спасибо получено: 3
Приветствую! Хотел бы попросить вашей помощи.
Я создал новый класс, например NewClass и мне нужно добавить строку его создания в стандартный класс Scene_Title. Возможно ли это сделать, не изменяя саму Scene_Title?

Создаю класс в стандартном Scene_Title:
class Scene_Title
	...
	def command_new_game
		...
		$new_class = NewClass.new
		...
	end
	...
end
Последнее редактирование: 14 года 3 нед. назад от srg91.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 нед. назад #36161

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
Попробуй так:
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
Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Последнее редактирование: 14 года 3 нед. назад от dark32.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: srg91

Сообщество скриптеров (Академия) 14 года 3 нед. назад #36164

  • srg91
  • srg91 аватар
  • Вне сайта
  • Путник
  • Сообщений: 7
  • Спасибо получено: 3
о, все работает, спасибо!
Но вот появился вопрос, а если функция передается с параметром, как тут выкрутится?

Ex.
class Scene_Save
	...
	def write_save_data(file)
		...
		Marshal.dump($player_items, file)
		...
	end
	...
end
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 нед. назад #36165

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
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
Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Последнее редактирование: 14 года 2 нед. назад от Fizmatik. Причина: проверка подсветки
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: srg91

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36750

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПисатель 2 местоОрганизатор конкурсовРазработчик2 место ПисательПобедитель конкурса
Есть код:
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. Например, после работы с массивом
[0,1,1,11,10,110,21,1,0,11,0,1,12].indequal(1)
Мы должны получить массив [1,2,7,11], но вместо того, чтобы выдать этот результат, скрипт зависает. Что я делаю не так?
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36754

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПисатель 2 местоОрганизатор конкурсовРазработчик2 место ПисательПобедитель конкурса
Написал другой вариант:
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.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36758

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПисатель 2 местоОрганизатор конкурсовРазработчик2 место ПисательПобедитель конкурса
И вдогонку вопрос:

Есть массив 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. Просто ранее я использовал одномерный массив А и добавлял к нему массив В тупо сложением.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36761

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
James, ты какие языки программирования знаешь? А то твои коды похожи на Паскалевские - всё сложно, муторно и в придачу работает не так как надо. (сам знаю Паскаль, знаю как на нём работать)

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

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

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36762

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПисатель 2 местоОрганизатор конкурсовРазработчик2 место ПисательПобедитель конкурса
James, ты какие языки программирования знаешь?
Паскаль и знаю.
Извини, я честно не понял как работает первый скрипт, который не работает.
Я планировал сделать так: с помощью index(q) ищется первый элемент, равный q и его номер заносится в i. Потом в массиве начиная с i-го элемента по конечный используется опять index(q).
Но я всё же написал свой скрипт, кажись он работает. Проверяй
Кажется, работает.

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

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

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

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36763

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
if <что угодно>
если <что угодно> существует то истина( если <что угодно> не равно ложь) - это особенность Руби.
В Array загонять не годится, наверное - я не намерен использовать это ещё где либо. Хотя, вариант приемлемый.
ну так просто помести этот код без класса Array в свой класс (или куда ещё), правда придётся слегка его поправить, если нужен буден он как метод.
def daplma(da,ma)# Dual Array PLus Mono Array
    da + ma.map{|i|[i,0]}
end
arr.map{|i|[i,0]}
примерно равносильно
 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! - тоже самое, но как говорит нам ! - изменяет сам массив
Тьма, тьма, и ничего кроме тьмы...

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

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36765

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПисатель 2 местоОрганизатор конкурсовРазработчик2 место ПисательПобедитель конкурса
Вопрос: Приемлемо ли такое:
def instant_thought(cont,duration=(St_Letter_Duration)*cont.size)
, где St_Letter_Duration - константа?
Последнее редактирование: 13 года 11 мес. назад от James.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36827

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПисатель 2 местоОрганизатор конкурсовРазработчик2 место ПисательПобедитель конкурса
Есть код:
case conts.class
    when Array
      <Какой-то код 1>
    when String
      <Какой-то код 2>
    end
Но не выполняется ни код 1, ни код 2. Причём, я проверял, что класс - Array (Или String).

Почему так?
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36828

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
ни чё не понимаю. В теории ошибки нет, но на практике даже чистый Руби не работает...
Скажи цель этого выбора, я заставлю его работать.

бред.. бред... бред... но работает...
conts=['88']
case conts
    when Array
      p "arr"
    when String
      p "str"
     else p  conts.class
end
Тьма, тьма, и ничего кроме тьмы...

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

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36829

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПисатель 2 местоОрганизатор конкурсовРазработчик2 место ПисательПобедитель конкурса
Я уже разобрался:
    case (conts.class).to_s
    when "Array"
      код 1
    when "String"
      код 2
    end
Последнее редактирование: 13 года 11 мес. назад от James.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36831

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
Оригинально, это тоже работает, но... это не оптимально, строка занимает места больше в памяти, а .class как бы не должна.
Да и моё решение выглядит красивше.
Тьма, тьма, и ничего кроме тьмы...

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

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36835

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПисатель 2 местоОрганизатор конкурсовРазработчик2 место ПисательПобедитель конкурса
Есть код (Ногами не бейте):
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

По идее, он должен по очереди показывать текст. Но при попытке задать ему
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
А, не, всё в порядке. Тупо в эвенте неправильно скрипт прописал. Перенёс запятую на следующую строчку
Последнее редактирование: 13 года 11 мес. назад от James.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36889

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПисатель 2 местоОрганизатор конкурсовРазработчик2 место ПисательПобедитель конкурса
Определяю размеры строки методом bitmap.text_size
На строку "a^2=b^2+c^2-2bc*cos A" выдаёт ширину 201. Но когда я пытаюсь впихнуть эту строку в битмап такой ширины, то строка сжимается.

От чего такое может быть?
Последнее редактирование: 13 года 11 мес. назад от James.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36890

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
почему так - не знаю,
попробуй подобрать минимальную ширину при которой не сжимается, потом изменить длину текста и повторить, может это .text_size халтурит.
Тьма, тьма, и ничего кроме тьмы...

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

Сообщество скриптеров (Академия) 13 года 11 мес. назад #36891

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПисатель 2 местоОрганизатор конкурсовРазработчик2 место ПисательПобедитель конкурса
Ставлю 202 - и уже нормально. Видимо, это так работает - нужно взять на 1 пиксель больше, чем задаёт .text_size. Ненормально, конечно...

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

Оффтоп:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Последнее редактирование: 13 года 11 мес. назад от James.
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.503 секунд