Нужна идея для отображения скрытых стен

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

Ленивый волчонок с большими амбициями

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

ВНИМАНИЕ: Спойлер!
Последнее редактирование: 11 года 4 мес. назад пользователем Волчонок.

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

1 место в Готв 3 место Учитель Разработчик 3 место Готв Ветеран Писатель 2 место Тестер
Больше
Проект месяца 2 место Проект месяца 3 место Ветеран Оратор Разработчик Проект месяца 1 место Паладин Проект года 2 место Проект года 1 место
Больше
11 года 4 мес. назад #77083 от I_LORD
А я вообще не пойму вопроса. И скрин глянул. У тебя там пол стены без макушки, а по бокам вообще разные тайлы макушки.

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

Даритель Стимкея Проект месяца 2 место 1 место в Готв 3 место Готв 3 место Ветеран
Больше
11 года 4 мес. назад - 11 года 4 мес. назад #77085 от MaltonTheWarrior
Я так понимаю, что обычная стена в три тайла высотой + макушка, зайдя за эту стену можно было бы увидеть, что лежит за ней.

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

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

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

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

Программист Ruby Разработчик Проект месяца 3 место Проект месяца 2 место Проект года 1 место Проект года 3 место Учитель Оратор Паладин Проект месяца 1 место 2 место Готв 3 место Организатор конкурсов Ветеран
Больше
11 года 4 мес. назад #77086 от caveman
В паках ХФ прилагался вот такой скрипт:
Code:
#============================================================================== # ** 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

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

Даритель Стимкея Проект месяца 2 место 1 место в Готв 3 место Готв 3 место Ветеран
Больше
11 года 4 мес. назад #77087 от MaltonTheWarrior
Пещерный, а он делает прозрачной всю стену или только участок, за которым стоит спрайт героя?
И это для Аси скрипт? :3 Не различаю скрипты для разных версий мейкеров :mad:

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

Оратор Паладин Даритель Стимкея Проект месяца 1 место Проект месяца 2 место Проект месяца 3 место 2 место Готв 2 место За 3 место на конкурсе маппинга
Больше
11 года 4 мес. назад #77088 от Sypherot

MaltonTheWarrior пишет: Пещерный, а он делает прозрачной всю стену или только участок, за которым стоит спрайт героя?
И это для Аси скрипт? :3 Не различаю скрипты для разных версий мейкеров :mad:

Тот участок, за которым расположился персонаж, насколько я понял.
И да - он для аси.

Всего хорошего, и спасибо за рыбу

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

3 место 3 место в Кодировке 2 место Организатор конкурсов
Больше
11 года 4 мес. назад - 11 года 4 мес. назад #77098 от Волчонок
Демий, про шифт я знаю, и более того - он на карте применён... И по ссылке картинки не грузятся.

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

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

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

Ленивый волчонок с большими амбициями

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

ВНИМАНИЕ: Спойлер!
Последнее редактирование: 11 года 4 мес. назад пользователем Волчонок.

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

1 место в Готв 3 место Учитель Разработчик 3 место Готв Ветеран Писатель 2 место Тестер
Больше
11 года 4 мес. назад #77099 от Демий

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

Проект месяца 2 место Проект месяца 3 место Ветеран Оратор Разработчик Проект месяца 1 место Паладин Проект года 2 место Проект года 1 место
Больше
11 года 4 мес. назад #77105 от I_LORD
ВНИМАНИЕ: Спойлер!

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

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

3 место 3 место в Кодировке 2 место Организатор конкурсов
Больше
11 года 4 мес. назад #77106 от Волчонок
А, ты про это.... Жёлтая - потолок, зелёная - стена.

Спасибо всем за советы, буду делать стены картинками.

Ленивый волчонок с большими амбициями

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

ВНИМАНИЕ: Спойлер!

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

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