![]() |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
1) Типы внутри типов использовать МОЖНО., естественно, обьявить новый тип в теле другого типа никто вам не даст. А вот такая запись вполне допустима :
Код:
Type TCar 2) Насчет статичных функций. Всегда считал, что с приходом методов они стали атавизмом. Ну нету таким функциям рационального использования и все тут! Единственное что они привносят - так это путаницу, и нечитабельность кода. Более того они не являются частью ООП. Многие новички любят делать такими функциями конструкторы и деструкторы, но вот только с точки зрения ООП - это все равно, что загнать себя в угол и кричать потом от безисходности и нечитабельности кода. Да и еще, статичные функци начинают "по настоящему" мешать, если речь идет о развитии и поддержке кода, так как они убивают само понятие "наследования" читай ООП. 3) Отсюда вывод -> Никаких функций в типах. Конструкторы и деструкторы можно легко сделать на методах. Код:
Type TVector Код:
Код:
Type TParent ЗЫ : Хотя, некоторые БМаксеры считают это небезопасным маневром в плане уборки мусора. ПРАВКА : Насчет полей я был не прав. Их можно только переопределить. |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
А какой может быть практический смысл использования "типа в типе"? Или это просто разработчики языка не доглядели и теперь можно делать такой странный "хак"?..
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Почитай что нибудь про ООП. Многое станет ясно.
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Это скорость.
Вообще все типы, методы, функции, поля, переменные, константы - образуют собой дерево, которое заносится как я понимаю в стек (а может и по другому). И если допустим мы вызываем метод, тогда чем ближе какой-либо обьект лижет в ветке данного метода, тем быстрее произойдет поиск / вызов / операция. Код:
Global value:Int = 100 В одно время Oxid высказывал свое мнение по этому поводу : если в функции обьявить локальную переменную и назвать ее коротким именем, то есть шанс что переменная занесется в регистр процессора для мнгновенного доступа. Для глобальной функции приоритет приблизительно таков : аргументы->локальные переменные->глобальные переменные. Для метода : аргументы->поля->локальные переменные->глобальные переменные внутри типа->глобальные переменные. С вызовом функций и методов тоже самое, если какая либо функция вызывается много раз внутри другой - то лучше сделать эту функцию приватной. А если рассматривать целиком весь БМакс, то он весь состоит из чунков (порций кода), - отсюда его модульность. По идее глобальную функцию (и не только ее) можно вызвать класически : DrawImage(image,x,y,0) А можно явно указать с какого чунка вызвать функцию : brl.max2d.DrawImage(image,x,y), в той же степени это относится ко всему остальному. Хотя на самом деле компилятор на стадии формирования кода все вызовы приводит ко второму виду. Для пытливых - можно пойти еще дальше : brl.max2d.TImage(image).Frame(0).Draw(...) - но это уже черезчур =) |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Запускаю блицмакс, а он выдает ошибку "Unable to determine BlitzMax version. Please, reinstall BlitzMax to repair this problem". Это че за хрень?
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Пожалуйста, переустанови BlitzMax, чтобы исправить эту проблему.
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Спасибо, кэп. Переустановил, то же самое.
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
У тебя Widows?
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
К сожалению, да. Поставил Blide, заработало.
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Есть List, в нём несколько int. Проходим по нему For..Each'ем - MAV - пишет, что индекс цикла (который, естественно, тоже int) должен быть объектом. Разве Int это не тип?
Цитата:
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
А вот String пожалуйста. Можешь делать так: Код:
Local str:String |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
У меня есть тип и несколько экземпляров. Мне известно значение поля одного из экземпляров. Как мне получить этот экземпляр?
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Заноси экземпляры в список, а потом пробегись по нему, проверяя значение поля.
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
А да, забыл написать...
Как такое сделать без перебора ? Вообще возможно-ли ? АПД: То что мне известно значение поля значит - что оно у меня уже в переменной. |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Хз если есть что-то подобное хаш таблицам. Но если в полях есть уникальные данные, то можно сделать хаш таблицу, и использовать значение как индекс. Но это не подойдёт во многих случаях..
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Как в BLide приделать иконку к exe'шнику?
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
Создаёшь файл ресурсов с иконкой (for example "projecticon.o") И пишешь в начале кода: Код:
?Win32 UPD: лол, не глянул на твой ник. Я иконку уже приделал, зайди в скайп, всё обсудим. |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Можно ли сделать функцию чтоб возвращала тип по параметру поля, но без перебора?
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Разве что ты как-то их категоризируешь.
Тогда перебора меньше будет. Ничего стандартного без перебора нет(Хотя про TList не уверен, можно в его сорцах посмотреть) |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Здравствуйте. Когда то очень давно попадался пример кода
Обыскивающий файлы в папках и подпапки в папках. Потерялся :( Как получить список имен файлов в определенной папке? ВОПРОС СНЯТ. Нашёл информацию тут: http://en.wikibooks.org/wiki/BlitzMa...em/File_system P.S. Прошу оставить данное сообщение для возможности поиска |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Не могу понять как обработать ошибку с помощью
try throw Catch Except У меня где-то в коде в фоновом потоке выполняется неведомая хрень. ___Добавлено: Причем если выполнять код в однопоточном режиме то всё нормально. Программа тут-же вылетает с "EXCEPTION ACCESS VIOLATION" "Зрительный" поиск ошибок в коде не помог. =) Хотелось бы разделить код на участки с "попыткой" и писать в лог каждый НЕЗАВЕРШЕННЫЙ из-за ошибок участок, но при этом чтобы программа продолжала работать. |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
http://ruseller.com/lessons.php?rub=37&id=1277
http://ruseller.com/lessons.php?rub=37&id=1279 Не BlitzMax, но смысл try...catch секций мне удалось понять только из этой статьи. |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
Например отрисовка NULL объекта? |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
Можно пример в студию? |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
Вот такая байда например работать не хочет при билде релиза. В однопоточном Debug Mod работает. В многопоточном не работает. Local Image:TImage; Try DrawImage(Image, 0, 0, 0) ; Catch ex:Object Print ex.ToString() End Try |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
up up up
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
ну что тут можно посоветовать.. тебе точно многопоточное необходимо?
*Для справки, ты же вкурсе что разруливать потоки нужно самому да? Простое включение многопоточности не сделает приложение таковым. |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
У меня есть основной игровой цикл И задача в фоне которая создает объект для обработки в главном цикле. Долго объяснять. Вот всё бы нормально... до тех пор пока главный цикл не обратиться к "недосозданному" в фоне объекту. Или когда главный цикл попытается удалить этот объект Я даже при создании и удалении блокирую один и тот-же мутекс. Всё равно где-то ошибка. Теперь мне как обработать попытку в главном цикле и как обработать попытку в фоне? Ибо ошибка EXCEPTION_ACCESS_VIOLATION |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Вот накатал код, относительно по структуре похожий на мой
При длительной симуляции обязательно произойдёт ошибко. Как обработать это всё попыткой? Так как главный цикл не знает какое действие выполняется прямо сейчас в фоне и наоборот. Типа получилось удалить - ок, не получилось то просто PRINT чегонибудь Но чтобы прога не останавливалась. Надеюсь я понятно выражаюсь, и вы сможете мне помочь. Спасибо заранее. Код:
Type TCustomType Добавлено: В этом примере при операциях с листом если вставить LockMutex,UnlockMutex Всё работает без ошибок. В моём коде - нет. =( Пока не разобрался почему. Но обработчик попытки мне всё равно нужен |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
По поводу семпла бегло могу сказать сразу:
Код:
Function Add(X:Int, I:Int, Text:String, Source:String = " ") Код:
While Not KeyDown(KEY_ESCAPE) Код:
Method Destroy() Написал семпл: Код:
SuperStrict Твой код с указанными выше правками тоже работает. Код:
SuperStrict |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
2 Randomize
Спасибо за поправку, но не придирайтесь пожалуйста к мелким ошибкам, разумеется в Код:
Function Add(X:Int, I:Int, Text:String, Source:String = " ") Код:
While Not KeyDown(KEY_ESCAPE) Ошибка вызванная операциями в основном и фоновом потоке никак не связана с моими маленькими погрешностями. Попытка, Исключения указанные тобой при во втором примере работают только в DebugMod и в однопоточном режиме. За первый спасибо. Работает =))) Странно, но у меня тоже самое не пахало =) Вообщем доразобрался. Всем спасибо |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Новый вопрос
Целесообразно ли использовать в каждом графическом объекте TLink на Image вместо самого TImage если в системе много объектов с одинаковым изображением? ? |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Где можно скачать новую версию blitzmax ?
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Ты это серьёзно?
http://forum.boolean.name/showthread.php?t=15661 |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Подскажите пожалуйста, как вызывать из функции другую функцию, если название второй было передано в первой.
К примеру, как это делает функция CreateThread() ? Исправьте плиз код, чтобы из функции RunObj можно было вызвать любую другую, которая идет в параметре к данной функции. Код:
Function ObjTest:Object() |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
А ты посмотри как CreateThread() сделан:
Код:
Function Create:TThread( entry:Object( data:Object),data:Object ) |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
Это я уже посмотрел Теперь как вызвать этот самый entry ? |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Сижу, читаю. Неужели всё придется делать через EVENT'ы и HOOK'и ?
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
Код:
Function ObjTest:Object() |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Благодарю
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
А за способ спасибо. Всё заработало. |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Очередной трабл.
Пишу мини-ИИ для "баллистического бота" если можно так сказать Суть в том, что он должен выстрелить снарядом в объект, но в точку в которой объекта ещё нет. То есть должен просчитать траекторию движения цели, и выстрелить туда, где объект будет через t итераций (обновления объектов) Вот что известно на входе: Начальные координаты цели (X1,Y1) Скорость цели (V1) Направление движения цели (угол) (a1) Начальные координаты бота (X2,Y2) Скорость снаряда бота (V2) Вот что нужно найти Угол выстрела (a2) Через сколько t они встретятся (t) За одну итерацию координаты цели обновляются следующим образом X1 = X1+(V1*Cos(a1)) Y1 = Y1+(V1*Sin(a1)) Выпущенный снаряд выходит из точки X2,Y2, и за одну итерацию обновляет свои координаты похожим образом используя скорость V2 и угол направления движения который мы должны найти a2 Снаряд летит только туда, куда его направили, никакие больше силы на снаряд не действует. А Бот стоит на месте. Вариант решать перебором (начиная от 1 итерации и просчитывать столкнулись или нет - не подходит, так как сейчас именно так и делается и это не дело =)))) В принципе меня устроит только число t в данном случае. Буду знать t, буду знать угол. В данный момент уже читаю и книгу по физике для комп. игр и краткий курс тригонометрии. Но пожалуйста, помогите если кто знает. |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
дистанция = | координаты_цели - координаты_бота | время_полета_снаряда_по_прямой = дистанция / скорость_снаряда упрежденные_координаты_цели = координаты_цели + скорость_цели * время_полета_снаряда_по_прямой а если нужен именно угол, используй ATan2 с разностью упрежденных_координат_цели и координат_бота |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
Но если цель подвижна (с постоянной скоростью и углом направления) данный алгоритм уже не годится. Ибо сначала надо расчитать куда стрелять чтобы они столкнулись Цитата:
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Greymem
вот такой итеративный алгоритм вроде работает: 1) расчетная_позиция = позиция_цели 2) дистанция = |расчетная_позиция - позиция_бота| 3) время_полета = дистанция / скорость_снаряда 4) упрежденная_позиция = позиция_цели + скорость_цели * время_полета пункты 2,3,4 повторить несколько раз некогда все грамотно расписывать, поэтому глянь эту говнодемку:) при 5 итерациях ~60% попаданий, но это из-за того что цель отскакивает от стен, т.е. меняет направление когда выстрел уже произошел. Код:
SuperStrict |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Найс, очень полезно и прикольно.
Не понятно только зачем нужен цикл. =) Код:
For Local ComputingPass:Int = 1 To 5 Мистика =) К сожалению в данном примере направление X и Y довольно сильно различаются. Как сделать те-же самые расчеты используя только одну переменную направления? - Сделано Как установить угол выстрела на координату я уже знаю Осталось заранее узнать координату в которой они столкнуться. - Сделано. Вот переделал на использование одного поля "Direction" для пули Правда подлагивает, подёргивает (интересно из-за чего?) Но вроде работает, ХЗ, может ещё что неправильно, посмотрите плиз. Код:
SuperStrict |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
ты хоть читаешь что я пишу или сразу код копипастишь? Цитата:
Цитата:
Цитата:
Иначе говоря в коде расчета, перед циклом, был такой расчет скорости цели: Код:
Local TargetVelocityX:Float = TargetDirectionX * TargetSpeed Код:
Local TargetVelocityX:Float = Sin(TargetAngle) * TargetSpeed Цитата:
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
А какая гарантия того, что на 5-ом шаге цикла расчеты будут точнее чем на 3-ем?
Код уже готов, вверху. Можете глянуть, что не так? |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
И еще, при
Const TargetSpeed:Float = 3 и скажем Const BulletSpeed:Float = 4 Снаряд пулю уже не догонит, хотя мы меняли только скорость цели. Снаряд должен подстраиваться под цель по-идее |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
Вообще чем выше скорость пули относительно скорости цели, тем меньше итераций потребуется. Цитата:
Цитата:
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
Что-то ещё упустили? |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Вот что получилось, на случай, если кому-нибудь понадобится
Код:
SuperStrict |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Вопрос по геометрии:
http://forum.boolean.name/showthread...751#post211751 Решение найдено Код:
Function RotateAroundOrigin(X:Float Var, Y:Float Var, ox:Float, oy:Float, a:Int) Но немножко переделал под изменение координат опорной точки |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Это есть в стандартном функционале.
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Тему не читай, а сами знаете что....
Atan2() |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Цитата:
Уточните, что вы хотели этим всем сказать? |
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Я уже вам ответил: http://forum.boolean.name/showpost.p...3&postcount=17
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Сдается мне, ему не нужны намеки, ему нужен код.
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Нетъ и еще раз нетъ =)
Кое до чего я могу дойти сам Брать SetImageHandle и задавать xy с минусом? |
Часовой пояс GMT +4, время: 12:55. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot