RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2436257 views

“qspgui.cfg”, находится в папке плеера.

Не забудь закрыть плеер после настройки окон игры. Чтобы плеер при закрытии сохранил настройки в файл.

Атрибут “только для чтения”.

Nex,

Я не понимаю, что тебе нужно. И скроллинг и позиционирование работают. Поясни на примере, чего ты хочешь добиться.

У меня на локации такой код:

<div id="blok" style="position:absolute; left:50%; top:50%;">Текст</div>

И из-за того что по высоте блок “qsp-main” не равен блоку “qsp-wrapper-main” и соответственно первый родительский блок с позиционированием “qsp-scroller-main” тоже не равен блоку “qsp-wrapper-main”, то блок с id “blok” по вертикали будет позиционироваться не верно. Фактически, он будет расположен, как если бы было указано “top: 10px;”.

Mxat2008,
не понял, а зачем тебе текст посередине и поверх описания? Практический смысл этого какой? Объясни, зачем всё это делается, без абстрактных вещей “блок не равен блоку”.

Если тебе нужно по центру окна сделать текст, делай “position:fixed”.

Окей, вот практический пример. Перед локацией непосредственно боя у меня показываются в виде карточек напавшие на гг мобы с картинкой на передней стороне и их описанием на задней.

<div style="position:absolute; left:40%; top:40%;"><div style="text-align: center;">На вас напали враги.</div>
<div class="card" style="position:absolute; left:<<left_num>>px; top:50px;">
<div class="front_card">картинка<span style="position:absolute; left: 0px; bottom:0px;">кол-во</span></div>
<div class="back_card">Описание</div></div></div>

Мне нужно что бы карточки были по центру.
А примеров где нужно такое позиционирование не мало (практических). Сделать полосу загрузки по центру, показать небольшое модальное окно и тд.

Mxat2008,
для модального как раз лучше использовать “position:fixed”. Так сделано во всех диалогах, например.

Что касается твоей вёрстки. Тебе нужно отцентрировать по вертикали. Но проблема в том, что ты пытаешься отцентрировать внутри блока qsp-scroller-main, скроллера. Скроллер рассчитан на то, чтобы занимать место, отведённое для блока qsp-main. Расчёт происходит на уровне яваскриптового плагина. У блока qsp-main позиционирование “по умолчанию”. То есть он занимает места столько же, сколько его содержимое.

Причём, в твоём случае, содержимое занимает “нисколько” места, так как оно абсолютно позиционировано и вследствие этого “выключено” из расчёта блока qsp-main. Поэтому сам блок qsp-main занимает минимум места, одну строку.

Пытаясь центрировать относительно скроллера, который берёт свои размеры из qsp-main, который сам по вертикали ничтожен, ты не получаешь результата.

Какой здесь выход. Например, можно сделать так. Задать блок с абсолютным позиционированием, но при этом задать ему фиксированную ширину и высоту. Тогда внутри него уже можно поместить твоё содержимое, отцентрировать как хочется.

act 'Бросок куба':
color[cube]=rand(1,3)
if color=1: $color='желтый'
if color=2:	$color='красный'
if color=3: $color='синий'
'Куб <<color[cube]>>, <<$color[cube]>>'
end

act 'Бросок шара':
color[sphere]=rand(1,3)
if color=1: $color='желтый'
if color=2:	$color='красный'
if color=3: $color='синий'
'Шар <<color[sphere]>>, <<$color[sphere]>>'
end

act 'Бросок пирамида':
color[pyr]=rand(1,3)
if color=1: $color='желтый'
if color=2:	$color='красный'
if color=3: $color='синий'
'Пирамида <<color[pyr]>>, <<$color[pyr]>>'
end
	act 'Вернуть':
	'=========================='
	'Шар <<$color[sphere]>>'
	'Куб <<$color[cube]>>'
	'Пирамида <<$color[pyr]>>'
	end

В итоге возвращается только последнее значение, одно на всех, а как сделать чтобы запоминались значения для [cube],[pyr] & [sphere]?

svandrus,
код в принципе верный, ошибка допущена по невнимательности. Забыт индекс при присваивании массива $color.
Исправленный вариант:

act 'Бросок куба':
color[cube]=rand(1,3)
if color=1: $color[cube]='желтый'
if color=2: $color[cube]='красный'
if color=3: $color[cube]='синий'
'Куб <<color[cube]>>, <<$color[cube]>>'
end

act 'Бросок шара':
color[sphere]=rand(1,3)
if color=1: $color[sphere]='желтый'
if color=2: $color[sphere]='красный'
if color=3: $color[sphere]='синий'
'Шар <<color[sphere]>>, <<$color[sphere]>>'
end

act 'Бросок пирамида':
color[pyr]=rand(1,3)
if color=1: $color[pyr]='желтый'
if color=2: $color[pyr]='красный'
if color=3: $color[pyr]='синий'
'Пирамида <<color[pyr]>>, <<$color[pyr]>>'
end

act 'Вернуть':
'=========================='
'Шар <<$color[sphere]>>'
'Куб <<$color[cube]>>'
'Пирамида <<$color[pyr]>>'
end

Ну и ещё, проверь чтобы значения индексов отличались. Например так, этот код можно в начале локации написать или при старте игры:

cube = 1
sphere = 2
pyr = 3

Nex, спасибо, но таким образом для каждой фигуры придется прописывать собственные значения. А можно ли сделать массивы color и соответствующие им $color один раз, а потом просто подставляя нужный индекс возвращать нужные значения? И, главное, запоминать их куда-нибудь? т.е. получить конструкцию вроде:

Локация 1
if color=1: $color='желтый' 
if color=2: $color='красный' 
if color=3: $color='синий'

Локация 2
act 'Бросок куба': 
color[cube]=rand(1,3) 
gs 'Локация 1'
'Куб <<color[cube]>>, <<$color[cube]>>' 
end

svandrus,
оптимизировать код можно сколько угодно. Но для этого нужно знать все условия задачи. Из твоего кода совершенно непонятно, что это и зачем. Просто какие-то абстрактные фигуры, что-то куда-то “бросается”, случайный цвет… Пока нет понятного подробного описания сути происходящего, то нельзя и подобрать оптимальный код. Можно только строить догадки, и пытаться под них что-то изображать.

Например, если условия задачи звучат так:
1. Есть девять фигур, из них три куба, три шара и три пирамиды. Каждый тип фигуры имеет три цвета, жёлтый, красный и синий.
2. Игрок выбирает случайным образом из каждого типа фигур по одной.
3. В итоге у игрока есть три фигуры, по одной фигуре каждого типа, случайных цветов.

То оптимальный код, среднего уровня сложности, будет таким:

# Начало
$color_name[1] = 'желтый' 
$color_name[2] = 'красный' 
$color_name[3] = 'синий'
cube = 1
sphere = 2
pyr = 3

# бросок
тип_фигуры = ARGS[0]
выбран_цвет = RAND(1, 3)
color[тип_фигуры] = выбран_цвет
$color[тип_фигуры] = $color_name[выбран_цвет]


# Локация 2
ACT 'Бросок куба': 
    GS 'бросок', cube
    'Куб <<color[cube]>>, <<$color[cube]>>' 
END 
ACT 'Бросок шара': 
    GS 'бросок', sphere
    'Шар <<color[sphere]>>, <<$color[sphere]>>' 
END 
ACT 'Бросок пирамиды': 
    GS 'бросок', pyr
    'Пирамида <<color[pyr]>>, <<$color[pyr]>>' 
END 
ACT 'Вернуть':
    '=========================='
    'Шар <<$color[sphere]>>'
    'Куб <<$color[cube]>>'
    'Пирамида <<$color[pyr]>>'
END

Nex, вот это похоже на то, что мне было нужно. Спасибо. Для меня просто трудно правильно сформулировать задачу.

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

Дело в том согласно моей первоначальной идее в игре дожны присутствовать НПС которые согласно заданному для него расписанию должен появляться в заданной локаци, тоесть в меню действий есть (прошу прощения за тавтологию) действие
‘Осмотреться вокруг’ которое очищает список действий и замещает его перечнем имен НПС присутсвующих в локации, при клике на имя НПС игрока переносит в локация взаимодействия-диалога.

И если вторую половину(Список персонажей и взаимодействие сними) я знаю как реалиховать, то как создать болванчика и поставить его на ‘рельсы’ я представляю себе смутно.(Предвижу только, что там что-то связанное с масивами)

Прошу скинте ссылку на игру со схожей реализацией НПС, где можно посмотреть пример кода, или хотя бы подскажите какие разделы форума стоит почитать, что-бы разобраться с этой проблемой.

Заранее благодарю.

Vasssa,
массив в данном случае не требуется. Нужно использовать переменные и условия. Учебник изучил? Там есть примеры.

Также см. Действие по условию.

Пример кода.

'Погожий осенний день. Ветер гонит листву по тротуару. Редкие прохожие бредут по своим делам.'
ACT 'Осмотреться':
    IF полицейский_на_углу = 1:
        'Осмотревшись, на углу улицы вы замечаете скучающего полицейского.'
        ACT 'Поговорить с полицейским':
            GOTO 'Полицейский'
        END
    ELSE
        'Осмотревшись, вы не находите чего-либо примечательного.'
    END
END

Да, учебник читал, но здесть моя проблема была скорее психологическа, тоесть когда у меня появляется новая мне все время начинает казаться что реализовывается она гораздо сложнее чем оно есть на самом деле. Влюбом случае благодарю. :)

Тупой вопрос от нуба, оператор IF не может обрабатовать больше одного условия за раз или я не правильно пишу?
if locnum=3 and hour>7 and minut>0 and minut<10:

Vasssa:

Тупой вопрос от нуба, оператор IF не может обрабатовать больше одного условия за раз или я не правильно пишу?
if locnum=3 and hour>7 and minut>0 and minut<10:

Проверь (выведи) переменные перед проверкой. На вид всё должно работать.

Log in or Register to post comments.