Войти на сайт

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

ТЕМА: Нужна идея для отображения скрытых стен

Нужна идея для отображения скрытых стен 9 года 10 мес. назад #77080

  • Волчонок
  • Волчонок аватар
  • Вне сайта
  • Просветлённый
  • Волчонок
  • Сообщений: 277
  • Спасибо получено: 247
  • 3 место в Кодировке3 место2 место Организатор конкурсов
В общем, решил я для тренировки своих залежалых навыков сделать квест в условиях города и отдельной взятой квартиры. Придумал идею, начал рисовать первую локацию... И застрял. Дело в том, что игра будет проходить в основном в закрытых пространствах, и мне нужно как-то показать то, что находиться за стенами. Я придумал нарисовать тайлы обрезанных стен, как видел в паре других игр на мейкере, однако столкнулся с проблемой, что обрезанная часть стены... Не очень симпатично смотрится.
imgur.com/Vt4i2Kt
У кого-нибудь есть мысли на счёт того, как это реализовать?
P.S. Заметил несколько косяков на скрине, но уже поздно...
Ленивый волчонок с большими амбициями

Рассказ "Рождение мага", периодически обновляется
РПГ История Егеря. Основной текущий проект.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Последнее редактирование: 9 года 10 мес. назад от Волчонок.
Администратор запретил публиковать записи гостям.

Нужна идея для отображения скрытых стен 9 года 10 мес. назад #77082

  • Демий
  • Демий аватар
  • Вне сайта
  • Модератор
  • Здесь могла быть ваша реклама
  • Сообщений: 1597
  • Спасибо получено: 1520
  • ВетеранПисатель 2 местоТестер3 местоРазработчик3 место Готв1 место в ГотвУчитель
Администратор запретил публиковать записи гостям.

Нужна идея для отображения скрытых стен 9 года 10 мес. назад #77083

  • I_LORD
  • I_LORD аватар
  • Вне сайта
  • Светлый дракон
  • ;)
  • Сообщений: 777
  • Спасибо получено: 731
  • Проект месяца 1 местоПроект месяца 2 местоРазработчикПроект года 2 местоВетеранПроект месяца 3 местоОраторПаладин
А я вообще не пойму вопроса. И скрин глянул. У тебя там пол стены без макушки, а по бокам вообще разные тайлы макушки.
Администратор запретил публиковать записи гостям.

Нужна идея для отображения скрытых стен 9 года 10 мес. назад #77085

  • MaltonTheWarrior
  • MaltonTheWarrior аватар
  • Вне сайта
  • Просветлённый
  • Любопытненький
  • Сообщений: 327
  • Спасибо получено: 340
  • 3 место3 место ГотвДаритель СтимкеяВетеранПроект месяца 2 место1 место в Готв
Я так понимаю, что обычная стена в три тайла высотой + макушка, зайдя за эту стену можно было бы увидеть, что лежит за ней.

Эдакое создание объемного пространства)

На самом деле, это легко делается событиями и рисованием)

Либо делать просто каждую комнату отдельной картой.
Последнее редактирование: 9 года 10 мес. назад от MaltonTheWarrior.
Администратор запретил публиковать записи гостям.

Нужна идея для отображения скрытых стен 9 года 10 мес. назад #77086

  • caveman
  • caveman аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1274
  • Спасибо получено: 1307
  • 2 место ГотвПроект года 3 местоРазработчикПроект месяца 1 место3 местоПаладинПроект месяца 2 местоПроект месяца 3 местоПроект года 1 местоПрограммист Ruby
В паках ХФ прилагался вот такой скрипт:
#==============================================================================
# ** Game_CharacterBase
#------------------------------------------------------------------------------
#  This base class handles characters. It retains basic information, such as
# coordinates and graphics, shared by all characters.
#==============================================================================
class Game_CharacterBase
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :under_map_tile_z                                                               # Under Map Tile Z Flag
  attr_reader   :over_map_tile_z                                                                  # Over Map Tile Z Flag 
  attr_accessor :character_bitmap_area                            # Character Bitmap Area
  #--------------------------------------------------------------------------
  # * Alias Listing & Method Definition
  #-------------------------------------------------------------------------- 
  # Alias Method List
  ["init_private_members", "increase_steps", "moveto", "screen_z"].each {|name|
                # Alias Method
                alias_method :"pvgames_under_map_tile_z_game_characterbase_#{name}", name
                # Next if Methods don't need definition
                next if ["init_private_members", "screen_z"].include?(name)
                # Define Method
                define_method (name.to_sym) {|*args, &block|
                  # Run Original Method
                  self.send "pvgames_under_map_tile_z_game_characterbase_#{name}", *args, &block
                  # Update Under Map Tile Z Flag
                  update_under_map_tile_z
                 }
  }
  #--------------------------------------------------------------------------
  # * Initialize Private Member Variables
  #--------------------------------------------------------------------------
  def init_private_members(*args, &block)
                # Run Original Method
                pvgames_under_map_tile_z_game_characterbase_init_private_members(*args, &block)
                # Set Under/Over Map Tile Z Flag
                @under_map_tile_z = false ; @over_map_tile_z = false
                # Set Character Bitmap Area Rect
                @character_bitmap_area = Rect.new(0, 0, 1, 1)
  end   
  #--------------------------------------------------------------------------
  # * Get Screen Z-Coordinates
  #--------------------------------------------------------------------------
  def screen_z(*args, &block)
                # Return 300 if Under/Over Map Tile Z is true
                return 300 if under_map_tile_z? or over_map_tile_z?
                # Run Original Method
                pvgames_under_map_tile_z_game_characterbase_screen_z(*args, &block)
  end
  #--------------------------------------------------------------------------
  # * Opacity
  #--------------------------------------------------------------------------
  def opacity
                return @opacity if over_map_tile_z?
                return under_map_tile_z? ? 160 : @opacity
  end
  #--------------------------------------------------------------------------
  # * Determine if Under Map Tile Z effect is true
  #--------------------------------------------------------------------------
  def under_map_tile_z? ; @under_map_tile_z end
  def over_map_tile_z?  ; (!under_map_tile_z? and @over_map_tile_z) end   
  #--------------------------------------------------------------------------
  # * Update Under Map Tile Z Flag
  #--------------------------------------------------------------------------
  def update_under_map_tile_z
                # Get Character Area Bitmap Rect
                rect = @character_bitmap_area.dup
                # If Rect Width or Height is More than 32
                if rect.width >= 32 or rect.height > 32
                  # Set Rect Width and Height
                  rect.width = (rect.width / 32.0).round ; rect.height = (rect.height / 32.0).round
                  # Set Rect X & Y
                  rect.x = @x - (rect.width / 2) ; rect.y = @y - ( rect.height / 2)
                  # Set Over Map Tile Z to false
                  @over_map_tile_z = false
                  # Multiple Loops Catch
                  catch(:range) {   
                                # Go Through coordinates
                                for y in rect.y...(rect.y + rect.height)
                                  for x in rect.x...(rect.x + rect.width)
                                                # If Under Map Tile
                                                if under_map_tile?(x, y)
                                                  # Set Over Map Tile Z to true
                                                  @over_map_tile_z = true
                                                  # Break Loop
                                                  throw :range
                                                end
                                  end
                                end
                  }
                  # Go Through Bottom X
                  for x in rect.x...(rect.x + rect.width)
                                # Return Under Map Tile Z as true if under map tile
                                return @under_map_tile_z = true if under_map_tile?(x, @y)
                  end   
                end   
                # Set Under Map Tile Z
                @under_map_tile_z = under_map_tile?
  end
  #--------------------------------------------------------------------------
  # * Determine if Character is under tile
  #--------------------------------------------------------------------------
  def under_map_tile?(x = @x, y = @y) ; $game_map.over_character_tile?(x, y) end
end
 
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  This class handles maps. It includes scrolling and passage determination
# functions. The instance of this class is referenced by $game_map.
#==============================================================================
 
 
class Game_Map
  #--------------------------------------------------------------------------
  # * Determine if Tile goes over character [☆]
  #--------------------------------------------------------------------------
  def over_character_tile?(x, y)
        # Return if Tile is default for nothing
        return false if tile_id(x, y, 2) == 0
        # Check if Valid tile and bit (Over Character)
        # Instead of checking everything, just check layer 2. Seems like 
        # Layer 1 are automatically assigned for you, which may be bad
        return valid?(x, y) && transparent_tile?(x, y)
  end
 
  def transparent_tile?(x, y)
        tileset.flags[tile_id(x, y, 2)] & 0x10 != 0
  end
end
 
#==============================================================================
# ** Sprite_Character
#------------------------------------------------------------------------------
#  This sprite is used to display characters. It observes an instance of the
# Game_Character class and automatically changes sprite state.
#==============================================================================
class Sprite_Character < Sprite_Base
  #--------------------------------------------------------------------------
  # * Alias Listing & Method Definition
  #-------------------------------------------------------------------------- 
  # Alias Method List
  ["set_tile_bitmap", "set_character_bitmap"].each {|name|
                # Alias Method
                alias_method :"pvgames_under_map_tile_z_sprite_character_#{name}", name
                # Define Method
                define_method (name.to_sym) {|*args, &block|
                  # Run Original Method
                  self.send "pvgames_under_map_tile_z_sprite_character_#{name}", *args, &block
                  # Update Character Bitmap Area
                  update_character_bitmap_area
                 }
  }
  #--------------------------------------------------------------------------
  # * Update Character Bitmap Area
  #--------------------------------------------------------------------------
  def update_character_bitmap_area
                # Update Source Rect
                update_src_rect
                # Set Character Bitmap Area Rect
                @character.character_bitmap_area.set(0, 0, width, height)
  end
end
 
 
#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
#  This class handles events. Functions include event page switching via
# condition determinants and running parallel process events. Used within the
# Game_Map class.
#==============================================================================
class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # * Alias Listing & Method Definition
  #-------------------------------------------------------------------------- 
  # Alias Method List
  ["refresh", "clear_page_settings", "setup_page_settings"].each {|name|
                # Alias Method
                alias_method :"pvgames_under_map_tile_z_game_event_#{name}", name
                # Define Method
                define_method (name.to_sym) {|*args, &block|
                  # Run Original Method
                  self.send "pvgames_under_map_tile_z_game_event_#{name}", *args, &block
                  # Update Under Map Tile Z Flag
                  update_under_map_tile_z
                 }
  } 
end

Как он работает, я не знаю, но он точно умеет делать полупрозрачными тайлы со звездочкой, за которыми стоит герой.

Тогда тебе вырезать стену, посадить её на слой B-E и настроить звезды
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Ren310

Нужна идея для отображения скрытых стен 9 года 10 мес. назад #77087

  • MaltonTheWarrior
  • MaltonTheWarrior аватар
  • Вне сайта
  • Просветлённый
  • Любопытненький
  • Сообщений: 327
  • Спасибо получено: 340
  • 3 место3 место ГотвДаритель СтимкеяВетеранПроект месяца 2 место1 место в Готв
Пещерный, а он делает прозрачной всю стену или только участок, за которым стоит спрайт героя?
И это для Аси скрипт? :3 Не различаю скрипты для разных версий мейкеров :mad:
Администратор запретил публиковать записи гостям.

Нужна идея для отображения скрытых стен 9 года 10 мес. назад #77088

  • Sypherot
  • Sypherot аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1239
  • Спасибо получено: 1044
  • 2 место Проект месяца 3 местоПроект месяца 1 местоПроект месяца 2 место2 место ГотвДаритель СтимкеяЗа 3 место на конкурсе маппингаПаладинОратор
MaltonTheWarrior пишет:
Пещерный, а он делает прозрачной всю стену или только участок, за которым стоит спрайт героя?
И это для Аси скрипт? :3 Не различаю скрипты для разных версий мейкеров :mad:
Тот участок, за которым расположился персонаж, насколько я понял.
И да - он для аси.
Всего хорошего, и спасибо за рыбу
Администратор запретил публиковать записи гостям.

Нужна идея для отображения скрытых стен 9 года 10 мес. назад #77098

  • Волчонок
  • Волчонок аватар
  • Вне сайта
  • Просветлённый
  • Волчонок
  • Сообщений: 277
  • Спасибо получено: 247
  • 3 место в Кодировке3 место2 место Организатор конкурсов
Демий, про шифт я знаю, и более того - он на карте применён... И по ссылке картинки не грузятся.

I_LORD, спрайты одинаковые: imgur.com/xc2eazP

MaltonTheWarrior, именно! =) Как я писал в первом посте, игра будет про комнатки, замкнутые тесные пространства и коридоры, и мне в таком случае необходимо контролировать наполнение всех уголков.
Идея с событиями и рисованием мне нравиться, тем более, что в этом случае открывается много возможностей... хД

caveman, этот скрипт я видел, но тайлы на этих слоях один под другой не поставишь. Он годиться для деревьев и стен зданий, за которыми ничего быть не может (если я правильно понял код скрипта).
Ленивый волчонок с большими амбициями

Рассказ "Рождение мага", периодически обновляется
РПГ История Егеря. Основной текущий проект.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Последнее редактирование: 9 года 10 мес. назад от Волчонок.
Администратор запретил публиковать записи гостям.

Нужна идея для отображения скрытых стен 9 года 10 мес. назад #77099

  • Демий
  • Демий аватар
  • Вне сайта
  • Модератор
  • Здесь могла быть ваша реклама
  • Сообщений: 1597
  • Спасибо получено: 1520
  • ВетеранПисатель 2 местоТестер3 местоРазработчик3 место Готв1 место в ГотвУчитель
К слову, возможно можно использовать вот этот скрипт.
Администратор запретил публиковать записи гостям.

Нужна идея для отображения скрытых стен 9 года 10 мес. назад #77105

  • I_LORD
  • I_LORD аватар
  • Вне сайта
  • Светлый дракон
  • ;)
  • Сообщений: 777
  • Спасибо получено: 731
  • Проект месяца 1 местоПроект месяца 2 местоРазработчикПроект года 2 местоВетеранПроект месяца 3 местоОраторПаладин
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Как спрайты одинаковые? Желтая стрелка-один спрайт
Зелёная другой!
Администратор запретил публиковать записи гостям.

Нужна идея для отображения скрытых стен 9 года 10 мес. назад #77106

  • Волчонок
  • Волчонок аватар
  • Вне сайта
  • Просветлённый
  • Волчонок
  • Сообщений: 277
  • Спасибо получено: 247
  • 3 место в Кодировке3 место2 место Организатор конкурсов
А, ты про это.... Жёлтая - потолок, зелёная - стена.

Спасибо всем за советы, буду делать стены картинками.
Ленивый волчонок с большими амбициями

Рассказ "Рождение мага", периодически обновляется
РПГ История Егеря. Основной текущий проект.

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