forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   BlitzMax (http://forum.boolean.name/forumdisplay.php?f=104)
-   -   Выкладываем советы (http://forum.boolean.name/showthread.php?t=5397)

zheland 22.12.2007 22:32

Выкладываем советы
 
Решил вот создать темку!
Что-бы долго не искать, сюда кладём советы!
Вот я пока один выложу!


Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 5 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.

oxid 23.12.2007 09:32

Re: Выкладываем советы
 
Запись в строку по индексам – sting[2]=78
Одним из недостатков БМ является невозможность индексного доступа к строке для записи, как в массивах. Объяснение, почему Марк не делает нормальный индексный доступ к строкам, а только чтение, меня просто развеселило: он заботится о том, что, если мы передаем строку в функцию, ее там кто-то может изменить. А типа чтобы ее не изменили стопроцентно надо ее копировать, а не передавать через ссылку. А это целых 7 лишних символов каждый раз набирать: ".Copy()". Вопрос а нафик нам вообще надо сохранять строку? Или мы настолько тупы, что не знаем, что пишем? И нам ни за что не известно будет ли функция менять строку или нет? Ппц просто. Я уже молчу про то, что это решается на уровне языка элементарно, и не в одном языке делалось: аргумент функции объявляется как ссылка или как значение. Если ссылка – передаем ссылку на строку и она может быть изменена после работы функции. Если значение – то строка копируется и что там функция будет с ней делать, нас не волнует: у нас оригинал, а там - копия. Все блин. Все давно известно, ничего не надо изобретать и писать лишних 7 символов тоже не надо. Он наверное пропитался духом псевдо-любви к умалишенным в ущерб неумалишенных, так культивируемой в последнее время в США. Хотя это странно - он то не там совсем живет. Марк типо сильно боится дураков-программистов и сильно о них заботится.
Ну мы не дураки, поэтому не только не будем делать глупостей со строками, а даже будем с ними делать то, что нам не дадено, но нужно:
Код:

Local p:Int Ptr = Int Ptr(Varptr(str))
Local pchar:Short Ptr = Short Ptr(p[0])
pchar :+ 6'this offset depends on String structure

Вот так в pchar мы получаем указатель на строку - у кого есть желание может оформить это функцией.
А вот и рабочий примерчик:

Код:

Local str$ = "Hello"
Print str

Local p:Int Ptr = Int Ptr(Varptr(str))
Local pchar:Short Ptr = Short Ptr(p[0])
pchar :+ 6'this offset depends on String structure

pchar[0]=Asc("H")
pchar[1]=Asc("e")
pchar[2]=Asc(" ")
pchar[3]=Asc("h")
pchar[4]=Asc("e")

Print str


zheland 23.12.2007 15:49

Re: Выкладываем советы
 
Напоминаю, если вам совет понравятся,
авторам говорите СПАСИБО

При установке и в опциях игры обязательно должен быть пункт
, где будет папка SAVES
Потому-что при неисправности системы
или жёсткого диска с системой
все папки и файлы в папке Мои Документы могут исчезнуть
(У меня такое было!!!)
Сейчас обычно в играх сейвы сохраняются именно туда

Но если папку SAVES установить в папку с игрой
неопытные пользователи могут её не найти
и при неисправности жесткого диска с игрой -
и игра, и папка SAVES - удалятся

Я бы сделал возможность выбирать,
где должна лежать папка SAVES?
И сделать возможность сохранять в нескольких местах!

MATVEY 24.12.2007 04:08

Re: Выкладываем советы
 
дайте совет по работе сс хттп в мп....а именно,как сделать так чтоб текст из текстфилда переносился к примеру в водную строку в гугле???
За рание спасибо!!!

oxid 24.12.2007 07:27

Re: Выкладываем советы
 
Насчет текстфилда ничего не знаю. Даю хинт по массивам.
Быстрый обход многомерного массива.
Если мы задаем многомерный массив в виде array:Type[a,b,...,n], то пройти его весь можно простым eachin!
Пример:

Код:

Local a%[1,2,3]
For Local i% = EachIn a
    Print i
Next


HolyDel 24.12.2007 10:47

Re: Выкладываем советы
 
хм. а как ето разварачивает массив? по строкам, или по столбцам?

AndruXa 24.12.2007 11:56

Re: Выкладываем советы
 
1)Не используйте стандартный блицевский террайн, подгружайте уровни мешами
2)Старайтесь использовать меньше блицевских комманд, старайтесь делать как можно больше математики(если это возможно), используя игру переменными, т.к обрабатывается это быстрее, да и когда сам придумаешь систему, проще баги исправлять
3)Не пренебрегайте большим количеством условий, т.к. условия-это основа языка.
4)Храните все настройки такие как характеристики оружия,бота...в отдельных текстовых файлах, так-же при создании квестов и диалогов текст тоже подгружайте-увеличивает скорость компиляции и работы
5)Не используйте MaskImage-глючно, лучше создать маску в Фотожопе
6)Не забывайте очищать переменные, удалять меши и текстуры, использование которых больше не предусматривается дабы ускорить работу

dimanche13 24.12.2007 12:08

Re: Выкладываем советы
 
AndruXa, ты чего пьяный? раздел БлитзМакс.

AndruXa 24.12.2007 13:26

Re: Выкладываем советы
 
Цитата:

AndruXa, ты чего пьяный? раздел БлитзМакс.
А я и не говорил, что про блиц3д пишу

jimon 24.12.2007 15:05

Re: Выкладываем советы
 
AndruXa
ну и про какой тогда движок ты писал ?

oxid 28.12.2007 05:43

Re: Выкладываем советы
 
Как просто нарисовать часть изображения.
Код:

Function drawimagerect (image:TImage,x#,y#,xs%,ys%,width%,height%)
    DrawImage LoadImage ( PixmapWindow( LockImage(image), xs, ys, width, height) ),x,y
    UnlockImage image
End Function

Способ основан на том, что в качестве исходного объекта для LoadImage можно передавать класс TPixmap.
Команду PixmapWindow(...) можно заменить на аналог с использованием ООП: image.pixmaps[0].window( xs, ys, width, height ). При этом не надо делать после отрисовки UnlockImage.
Недостаток этого способа - низкое быстродействие, т.к. при поличении окна от TPixmap, происходит копирование части изображения самим процессором, без использования аппаратного ускорения.
Достоинство - простота и краткость.

jimon 13.01.2008 02:04

Ответ: Выкладываем советы
 
если нам надо сгенерировать случайно число A - M раз, чило B - K раз и тд
то смотрим суда :)

вот сам код в два типа
Код:

Type TGeneratorPair
        Field Number%
        Field Count%
End Type

Type TGeneratorNums
        Field List:TList
       
        Method AddNum(num%,count%)
                If Not List Then List = New TList
                Local pair:TGeneratorPair = New TGeneratorPair
                pair.Number = num
                pair.Count = count
                List.AddLast(pair)
        End Method
       
        Method GetValue%()
                If Not List Then Return -1
                Local pair:TGeneratorPair = TGeneratorPair(List.ValueAtIndex(Rand(0,List.Count()-1)))
                pair.Count:-1
                If pair.Count < 1 Then List.Remove(pair)
                If List.Count() = 0 Then List = Null
                Return pair.Number
        End Method
End Type

вот как юзать (вбивал в браузере .. )
Код:



Local gen:TGeneratorNums = new TGeneratorNums

'  AddNum(число , сколько раз)
gen.AddNum(1,4)
gen.AddNum(4,5)
gen.AddNum(7,6)

Local num%

While num <> -1
        num = gen.GetValue()
        if num <> -1 then debuglog num
wend

gen = null

операция List.ValueAtIndex тормозная в стандартной либе БМ :)
потому для максимального быстродействия списком юзаем мою модификацию :-)

jimon 02.03.2008 15:07

Ответ: Выкладываем советы
 
drunnik
кстати, вспомнил :)

игры пишут в папку мои документы потому что
если система в режиме пользователя, а не администратора
то приложения, в частности игры, не могут писать в свою папку
идинственое куда они могут писать ето в мои документы
(в пользовательскую папку)

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

ICoder 16.09.2008 12:15

Ответ: Выкладываем советы
 
Давно тут никого не было...
Мой совет, как выводить сглаженный текст: использовать SetBlend(ALPHABLEND), перед отрисовкой текста с DrawText().

Черный крыс 18.09.2008 23:11

Ответ: Выкладываем советы
 
Думаю что самый лучший выход отрисовки части изображения - это блиттером Driver.DrawPrimitive() - но он тоже не идеален....и довольно спецефичен....но побыстрее...=)


Часовой пояс GMT +4, время: 16:28.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot