forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   BlitzMax (http://forum.boolean.name/forumdisplay.php?f=104)
-   -   Вопрос-Ответ (для новичков BlitzMax) (http://forum.boolean.name/showthread.php?t=13756)

Nex 29.12.2012 09:32

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от Diablo1909 (Сообщение 247791)
Возьми 2д-физ двиг ( Box2d тебе в руки ), опиши формы круга ( а не шарика ) и прямоугольника и столкни друг с другом, после чего сгенерится вся инфа о точках столкновения.

А стандартными средствами никак не сделать? Я делаю игру типа Pong, а позже хочу еще и арканойд сделать. Зачем физ. двиг?

Nex 29.12.2012 13:45

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Посоны ну неужто никто не знает как сделать нормальный отскок мячика от палки которой управляешь? :(

Randomize 29.12.2012 14:12

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Угол падения равен углу отражения.
Что ещё надо?

Nex 29.12.2012 14:32

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от Randomize (Сообщение 247843)
Угол падения равен углу отражения.
Что ещё надо?

Ну так сделал. От стенок нормально работает, а вот при столкновении с палкой мячик начинает дергать и он проходит сквозь палку. :(

Черный крыс 29.12.2012 15:32

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Наоботот. Угол отражения равен углу падения.

Насчет пинг-понга - в БМаксе в комплект поставки входят еще примеры, и там присутствует пинг-понг-без-физ-двига.

Nex 30.12.2012 02:39

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от Diablo1909 (Сообщение 247848)
Насчет пинг-понга - в БМаксе в комплект поставки входят еще примеры, и там присутствует пинг-понг-без-физ-двига.

Посотрел пример оказалось что делаю практически так же. В примере используются две переменные для движения в стороны, а я использую sin, cos и угол шарика.

В общем с горем по полам сделал, но щас не могу понять как получать противоположный угол. :) Сделал просто angle: -angle, но работает через раз, иногда шарик пролетает сквозь ракетку либо угол тупо ставится в "0/-0" и мячик без конца летает туда-сюда, а так же пробовал angle = -angle, выходит тоже самое. :(
Подскажите плиз как надо. :-D

Черный крыс 30.12.2012 03:54

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Для избежания подобной ситуации прибегают к разного рода ухищрениям, как то : высчитывать угол отражения и менять его в зависимости от того, как далеко мяч столкнулся от центра платформы - наверно замечал, что если мяч сталкивается с самым краем платформы, то угол отражения становится очень острым. Еще можно учитывать скорость и направление движения платформы в момент столкновения, они тоже влияют на угол отражения.

Друг, это все элементарно делается векторами. Пользуйся ->

Код:

Function Compare:Int(obj:Float2, withObj:Object)
        Local vec:Float2 = Float2(withObj)
        Local mv:Float = obj.x + obj.y
        Local vv:Float = vec.x + vec.y
        If mv < vv
                Return -True
        ElseIf mv > vv
                Return True
        Else
                Return False
        EndIf
End Function

Public

Function F2:Float2(x:Float = 0.0, y:Float = 0.0)
        Return New Float2.Create(x, y)
End Function

Global NullFloat2:Float2 = New Float2.Create()

Private

Public

Rem'
        bbdoc: Класс двухмерного вектора.
EndRem
Type Float2
        Rem'
        bbdoc: x - product.
        EndRem
        Field x:Float
       
        Rem'
        bbdoc: y - product.
        EndRem
        Field y:Float
       
        Rem'
        bbdoc: Получть угол наклона вектора.
        returns: Угол наклона в градусах.
        EndRem
        Method Create:Float2(x:Float = 0.0, y:Float = 0.0)
                Self.x = x
                Self.y = y
                Return Self
        End Method
       
        Rem'
        bbdoc: Получть угол наклона вектора.
        returns: Угол наклона в градусах.
        EndRem
        Method ForAngle:Float2(angle:Float)
                x = Cos(angle)
                y = Sin(angle)
                Return Self
        End Method
       
        Method Delete() ' destructor
                x = Null
                y = Null
        End Method
               
        Rem'
        bbdoc: Получть угол наклона вектора.
        returns: Угол наклона в градусах.
        EndRem
        Method ToAngle:Float()
                Return ATan2(y, x)
        End Method
       
        Rem'
        bbdoc: Копировать вектор.
        returns: Вектор.
        EndRem
        Method Copy:Float2()
                Return New Float2.Create(x, y)
        End Method
       
        Rem'
        bbdoc: Установить вектор.
        returns: Ничего.
        EndRem
        Method Set(x:Float = 0.0, y:Float = 0.0)
                Self.x = x
                Self.y = y
        End Method
       
        Rem'
        bbdoc: Перевернуть вектор.
        returns: Вектор.
        EndRem
        Method Reverse:Float2()
                Return New Float2.Create(- x, - y)
        End Method
       
        Rem'
        bbdoc: Прибавить вектор.
        returns: Вектор.
        EndRem
        Method Add:Float2(f2:Float2)
                Return New Float2.Create(x + f2.x, y + f2.y)
        End Method
       
        Rem'
        bbdoc: Отнять вектор.
        returns: Вектор.
        EndRem
        Method Sub:Float2(f2:Float2)
                Return New Float2.Create(x - f2.x, y - f2.y)
        End Method
       
        Rem'
        bbdoc: Умножить вектор.
        returns: Вектор.
        EndRem
        Method Mul:Float2(f2:Float2)
                Return New Float2.Create(x * f2.x, y * f2.y)
        End Method
       
        Rem'
        bbdoc: Умножить вектор.
        returns: Вектор.
        EndRem
        Method Div:Float2(f2:Float2)
                Return New Float2.Create(x / f2.x, y / f2.y)
        End Method
       
        Rem'
        bbdoc: Умножить вектор.
        returns: Вектор.
        EndRem
        Method AddS:Float2(s:Float)
                Return New Float2.Create(x + s, y + s)
        End Method
       
        Rem'
        bbdoc: Умножить вектор.
        returns: Вектор.
        EndRem
        Method SubS:Float2(s:Float)
                Return New Float2.Create(x - s, y - s)
        End Method
       
        Rem'
        bbdoc: Умножить вектор.
        returns: Вектор.
        EndRem
        Method MulS:Float2(s:Float)
                Return New Float2.Create(x * s, y * s)
        End Method
       
        Rem'
        bbdoc: Умножить вектор.
        returns: Вектор.
        EndRem
        Method DivS:Float2(s:Float)
                Return New Float2.Create(x / s, y / s)
        End Method
       
        Rem'
        bbdoc: Умножить вектор.
        returns: Вектор.
        EndRem
        Method AddTimeStep(f2:Float2, dt:Float)
                x:+f2.x * dt
                y:+f2.y * dt
        End Method
       
        Rem'
        bbdoc: Точка векторов.
        returns: Точку (Float).
        EndRem
        Method Dot:Float(f2:Float2)
                Return x * f2.x + y * f2.y
        End Method
       
        Rem'
        bbdoc: Пересечь вектора.
        returns: Пересечение (Float).
        EndRem
        Method Cross:Float(f2:Float2)
                Return x * f2.y - y * f2.x
        End Method
       
        Rem'
        bbdoc: Левый перпендикуляр.
        returns: Вектор.
        EndRem
        Method LPerp:Float2()
                Return New Float2.Create(- y, x)
        End Method
       
        Rem'
        bbdoc: Правый перпендикуляр.
        returns: Вектор.
        EndRem
        Method RPerp:Float2()
                Return New Float2.Create(y, - x)
        End Method
       
        Rem'
        bbdoc: Спроецировать вектор.
        returns: Вектор.
        EndRem
        Method Project:Float2(f2:Float2)
                Return f2.MulS(Dot(f2) / f2.Dot(f2))
        End Method
       
        Rem'
        bbdoc: Повернуть вектор.
        returns: Вектор.
        EndRem
        Method Rotate:Float2(f2:Float2)
                Return New Float2.Create(x * f2.x - y * f2.y, x * f2.y + y * f2.x)
        End Method
       
        Rem'
        bbdoc: Повернуть вектор в обратную сторону.
        returns: Вектор.
        EndRem
        Method UnRotate:Float2(f2:Float2)
                Return New Float2.Create(x * f2.x + y * f2.y, y * f2.x - x * f2.y)
        End Method
       
        Rem'
        bbdoc: Получть длинну вектора.
        returns: Длинна вектора.
        EndRem
        Method Length:Float()
                Return Sqr(Dot(Self))
        End Method
       
        Rem'
        bbdoc: Получить квадрат длинны вектора.
        returns: Квадрат длинны вектора.
        EndRem
        Method LengthSq:Float()
                Return Dot(Self)
        End Method
       
        Rem'
        bbdoc: Установить длинну вектора.
        returns: Вектор.
        EndRem
        Method SetLength:Float2(ln:Float)
                Local f2:Float2 = Normalize()
                f2.x:*ln
                f2.y:*ln
                Return f2
        End Method
       
        Rem'
        bbdoc: Нормализировать вектор.
        returns: Вектор.
        EndRem
        Method Normalize:Float2()
                Return MulS(1.0 / Length())
        End Method
       
        Method Compare:Int(withObject:Object)
                Return.Compare(Self, withObject)
        End Method
       
        Method ToString:String()
                Return "{x:" + String(x) + "}{y:" + String(y) + "}"
        End Method
End Type


Nex 30.12.2012 06:42

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Спасибо, только как этот код использовать? Хотя бы семпл приложил. :)

Черный крыс 30.12.2012 16:41

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Ну например нам нужно двигать точку, которая имеет скорость и направление.

Создаем 2 вектора :

1 - это сама точка ( вектор его координат )
2 - это вектор скорости и направления.

КОД:

Код:

Graphics 1024, 768

Local pos:Float2 = New Float2.Create(512, 384)
Local speed:Float = 1.0
Local dir:Float2 = New Float2.ForAngle(90)

Local drawDir:Float2 = dir.Copy()

While Not KeyHit(KEY_ESCAPE)

        If KeyDown(KEY_A)
                speed:+0.01
                speed = Min(speed, 5.0)
        End If

        If KeyDown(KEY_Z)
                speed:-0.01
                speed = Max(speed, 0.0)
        End If
       
        If KeyDown(KEY_UP)
                pos = pos.Add(dir.MulS(speed))
        End If
       
        If KeyDown(KEY_DOWN)
                pos = pos.Sub(dir.MulS(speed))
        End If
       
        If KeyDown(KEY_LEFT)
                dir = dir.Rotate(New Float2.ForAngle(- 1.0 * Max((speed / 2.0), 1.0)))
        End If
       
        If KeyDown(KEY_RIGHT)
                dir = dir.Rotate(New Float2.ForAngle(1.0 * Max((speed / 2.0), 1.0)))
        End If
       
        Cls()
       
        SetBlend(ALPHABLEND)
        SetAlpha(1.0)
        SetColor(255, 255, 255)
       
        DrawText("Speed = " + String(speed) + " (press A/Z)", 10, 10)
       
        DrawOval(pos.x - 8, pos.y - 8, 17, 17)
       
        drawDir = dir.Copy().MulS(15.0)
       
        SetColor(255, 64, 64)
        DrawLine(pos.x, pos.y, pos.x + drawDir.x, pos.y + DrawDir.y)
       
        Flip(1)
Wend

End


Nex 09.01.2013 19:22

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Помогите проблемку решить. :)
Написал я парсер файлов для файлов с настройками. По дефолту все данные в String. И вот вопрос: как автоматом переводить данные под нужный тип данных ведь переменные могут быть и Int и Float?

Randomize 09.01.2013 21:37

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
есть же:
Код:

String.FromInt()
String.FromFloat()
String.ToInt()
String.ToFloat()

Осталось добавить IsInt(str:String) и IsFloat(str:String)
где идёт тупо проверка на содержащиеся "лишние" символы.

Для инта это минус и цифры от одного до девяти.
Тут кроме тупого перебора строки пока не наткнёшься на "левый" символ ничего хитрого то и не придумаешь.

Хотя можно тупо сравнить 0 и наш стринг превращённый в инт. Блиц то не ругается. Можно прям так и писать
Код:

Local h:Int = (15 * "Здарова".ToInt())
Но это извращение!


Для флоата всё тоже самое только с точкой
String.Find поможет найти точку.

Главное перед проверкой на Int/Float делать Trim чтоб всякие переводы кареток да табуляторы убрать.

yorri 17.03.2013 17:07

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Вопрос.
Может кто подскажет (линком, функцией, библиотекой...)

Есть квадратное изображение. Нужно его поворачивать на определенный угол, но относительно не центра или верх-лево, а, например, верх-право, низ-лево, низ-право.

В принципе сделал через перенос координат, но если изображение с картинкой, то получается ерунда...
Спасибо.

Nikich 17.03.2013 17:16

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
SetImageHandle image,x,y
image - хендл вашей картинки
x,y - координаты точки, относительно которой хотите вращать картинку.
Учтите, после применения функции картинка будет рисоваться(!) также не с левого верхнего угла, а с тех координат, что вы указали.

yorri 17.03.2013 17:39

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Спасибо.
Но потом можно вернуть все на место....SetImageHandle Image,0,0
Плюс компенсировать по нужной оси размер картинки

SetImageHandle Image,0,63
SetRotation(45)
DrawImage (Image, х+200, y+64) ' +64 компенсируем
SetRotation(0)
SetImageHandle Image,0,0

Тогда еще вопрос. Отсчет ведется от 0 до ширины/высоты картинки -1, так?

То есть, если нужно повернуть относительно угла верх-право картинку 64х64, тогда SetImageHandle Image,63,63
Правильно я думаю?

Nikich 17.03.2013 18:00

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
ЕМНИП, да, так как считаем от нуля.

Reizel 17.03.2013 22:38

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
а мне кажется, таки 64\64, ибо точка поворота будет у правого нижнего пикселя + нижнего правого угла. А вообще, полезно создать папку для "тестов" - и отлаживать там всякие спорные моменты (я так отлаживал шум перлина, астар, инверс.кинематику и прочее, очень помогает при написании верных рабочих формул\функций)

Nikich 17.03.2013 22:51

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
К тому же, неплохо создать папку с верными реализациями того или иного момента, дабы в будущем не проделывать одну такую же работу.

yorri 18.03.2013 12:38

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Так и сделал ))

yorri 23.03.2013 14:47

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Вопрос.
Есть тайловое игровое поле - большое (1000х1000), когда я двигаюсь и его перерисовываю части изображения начинают как бы "дребезжать и смазываться"...
1. Можно ли как то это устранить, может синхронизацией какой то?
2. Может лучше давать перерисовывать только видимые тайлы , а не все поле?
Спасибо.

Nikich 23.03.2013 17:42

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Рисовать обязательно надо только видимые тайлы. Во-первых, какой смысл рисовать то, что мы не видим? Во-вторых, мало того, что это бесполезно, мы ещё и производительность теряем.
Измени Flip, на Flip(1), должно помочь.

yorri 23.03.2013 18:41

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Спасибо, попробую.

yorri 03.04.2013 15:43

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Еще раз спасибо, все сделал, все получилось.

Тут возник такой вопрос.
Есть главный файл
В нем
Код:

...
Include "Bullet.bmx"
Import "Collisions.bmx"
...

Global BulletList:TList = CreateList()

...
в главном цикле
...
CollisionsCheck()
...

Хочу сделать в отдельном файле Collisions.bmx всякую проверку столкновений, но не могу "добраться" ...

Код:

Function CollisionsCheck()

For Local Bullet:TBullet = EachIn BulletList
       
  If Bullet.BulletCollided = 1 Then DrawText "Collide" + BulletX, 10, 30

Next
EndFunction

Выдает ошибку "Compile Error: Identifier 'TBullet' not found"

Параметр BulletCollided описан в Bullet.bmx

Спасибо.

Nex 03.04.2013 16:08

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Поидее должно работать но к чему тут Import?
Код:

Include "Bullet.bmx"
Import "Collisions.bmx"


SBJoker 03.04.2013 17:06

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Емнип Import в BlitzMAX это как Include_once, добавляет только если ещё не было добавлено ранее.

yorri 03.04.2013 18:27

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Спасибо, заработало. Поменял Import на Include.
/не опытен я еще :-)/

yorri 04.04.2013 17:42

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

yorri 04.04.2013 23:27

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Еще вопрос.:)

Проверяю столкновение.
Вот такой вариант работает
Код:

Local p:Object[] = CollideImage(BulletImage, BulletX, BulletY, 0, 1, 0)
For Local i:Int = 1 To p.Length
DrawText "Collide" + (TTile(p[i - 1] ).MapX), 10, 250
Next

А такой нет
Код:

Local p:Object = CollideImage(BulletImage, BulletX, BulletY, 0, 1, 0)
If p <> Null Then
Local i:Int = TTile(p).MapX
DrawText "Collide " + BulletX, 10, 250
EndIf

Как бы одно и тоже, но во втором варианте выдает ошибку, типа ссылка на Null объект... хотя отладчик показывает, что переменная р не пустая...

Platon 05.04.2013 14:03

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
в первом случае кастуешь указатель на объект к тайлу
во втором случае кастуешь указатель на коллекцию обьектов, что неверно, преобразовать тип не удалось, в результате указатель на TTile становится null

и еще
Цитата:

For Local i:Int = 1 To p.Length
...[i - 1]...
Юзай Until:
Цитата:

For Local i:Int = 0 Until p.Length
...[i]...

yorri 06.04.2013 12:00

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от Platon (Сообщение 256349)
в первом случае кастуешь указатель на объект к тайлу
во втором случае кастуешь указатель на коллекцию обьектов, что неверно, преобразовать тип не удалось, в результате указатель на TTile становится null...

Спасибо. Кажись понял.

Nikich 07.04.2013 01:23

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Не подскажите, как можно свернуть окно приложения так, чтобы оно не отображалось на панели задач? Желательно также, чтобы в трее тоже не было видно.

Reizel 09.04.2013 01:46

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от Nikich (Сообщение 256441)
Не подскажите, как можно свернуть окно приложения так, чтобы оно не отображалось на панели задач? Желательно также, чтобы в трее тоже не было видно.

WinAPI. онли

yorri 14.04.2013 17:17

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Назрели два вопроса. Буду признателен за помощь.
Первый.
Каким образом можно узнать/отсчитывать отрезки времени. Например мне нужно выполнять некоторое действие скажем каждые 10, 15, 30 сек?...

Второй.
Есть тайл-изображение (32х32, png), есть другой тайл (32х32, png). Нужно обьеденить эти изображения (скажем методом "И"), то есть поверх первого нарисовать другое, и что бы результат действий записался вместо первого изображения. Можно как то это сделать?, а то сейчас просто рисую второе поверх первого, что не есть хорошо.
Спасибо.

Nikich 14.04.2013 17:55

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Код:

Global time=MilliSecs(), interval = 500
...

if MilliSecs()-time>interval
...
time=MilliSecs()
endif

Мне кажется, попиксельно изменять картинку будет медленнее, чем нарисовать 2 картинки.

yorri 14.04.2013 18:26

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Спасибо за Первый вопрос, пробую.
Касательного второго.
Это я понимаю. Проблема в том, что картинок слишком много. В принципе можно сформировать массив нужных картинок заранее (при старте программы), но тогда тоже нужно попиксельно?

yorri 12.05.2013 14:34

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Вопрос по коллизиях.
Проверяю столкновение пули с мобом
Код:

...
For Local Bullet:TBullet = EachIn BulletList
       
        Local p:Object[] = CollideImage(Bullet.BulletImage, Bullet.BulletX, Bullet.BulletY, 0, 3, 0)
       
        For Local i:Int = 1 To p.Length
       
                If TImage(p[i - 1] ) Then
               
                        Local e:TMob = TMob(p[i - 1] )         
                        If e Then e.MobImage = TileImages[11]
...

И в методе отрисовки моба
Код:

...
DrawImage (MobImage, x - xx, y - yy)
CollideImage(MobImage, x - xx, y - yy, 0, 0, 2, Object(MobImage))
...

Все мобы в списке MobList:TList

Проблема в том, что в переменной е оказывается Null
Может неправильно обьявляю в CollideImage параметр id:Object ?

Nikich 12.05.2013 14:58

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Вы уверены, что вам нужно именно столкновение картинок?
Очень часто, хватает нахождения расстояния, или пересечения прямоугольников.

yorri 12.05.2013 15:24

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Ну хотелось бы сделать именно так.
У меня работает вариант с Масивом тайлов, но там это как бы статически (то есть масив создается в начале игры) и я делаю так: CollideImage(TileImage, TileX, TileY, 0, 0, 1, MapObj[i, j] ).

А вот с мобами что-то не работает, не могу понять почему.
Другими словами, я не могу узнать в какого конкретного моба из десятка я попал....

yorri 13.05.2013 12:50

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Насколько я понял, неправильно передаю пареметр id:Object
CollideImage(MobImage, x - xx, y - yy, 0, 0, 2, Object(MobImage))

Потому как в переменной р (p:Object[]) только тип TImage, а не сам обьект с соответствующими полями...

yorri 13.05.2013 16:32

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Все. Как бы сделал. :-) Волшебное слово Self. /Забыл про него/

CollideImage(MobImage, x - xx, y - yy, 0, 0, 2, Self)

yorri 19.05.2013 01:57

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Гм. Вот такой вопрос. (Пробую сграбить изображение с альфа каналом)
Вот так работает:
Цитата:

Local z:Float

For x = 0 To 31

z = z + 0.03125

SetAlpha(z)
DrawImage (TileImages[8] , x * 32, 15 * 32)

Next
А так не работает:
Цитата:

Local z,a:Float

a=1/32 '=0.03125

For x = 0 To 31

z = z + a

SetAlpha(z)
DrawImage (TileImages[8] , x * 32, 15 * 32)

Next

SBJoker 19.05.2013 02:08

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
во втором объяви z как Float\
и будет тебе щастье

yorri 19.05.2013 11:41

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от SBJoker (Сообщение 259572)
во втором объяви z как Float\
и будет тебе щастье

Дык.
Так я так и сделал.
Код:

Local z,a:Float

SBJoker 19.05.2013 13:27

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
в блитзмаксе так нельзя, первая переменная у тебя без типа (значит Int)
Цитата:

Local z:Float, a:Float

yorri 19.05.2013 13:35

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Да делал и так, и сяк... нефурычит. Ладно это оставим.

Такой вопрос возник. Есть ли стандартнаэ функция затемнения Картинки типа SetAlpha, но чтобы не прозрачность, а именно просто затемнение?
Или самому нужно делать через SetColor?
Спасибо.

SBJoker 19.05.2013 13:44

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Через сет колор, а что касается неработающего кода надо кроме того численные константы использовать правильного типа
Цитата:

a=1/32 '= 0 потому что деление 1 на 32 нацело
a=1.0/32 '=0.03125

yorri 19.05.2013 13:52

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Спасибо. Понял.

IgorOK 14.07.2013 22:55

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Функция FileTime() выдаёт некое значение Int. Как из него получить дату и время последнего изменения файла?

Randomize 15.07.2013 00:39

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
PHP код:

Function TimeToStrF:String(time:Intformat:String)
    
Local buff:Byte[256]    
    
strftime_(buff256formatlocaltime_(Varptr(time)))
    Return 
String.FromCString(buff)
End Function

Local time:Int FileTime("MYFILE")
Print 
TimeToStrF(time"%Y-%m-%d %H:%M:%S"

Про strftime:
http://www.cplusplus.com/reference/ctime/strftime/
или
http://php.net/manual/ru/function.strftime.php

Nerd 05.08.2013 02:16

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Срочно понадобился простейший HTTP Get.
Это и это не работает, больше ничего не нагуглил.
Пожалуйста, скиньте, если у кого есть.

Randomize 05.08.2013 04:37

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Метод в лоб. Не везде прокатит - веб сервер может дропнуть соединение из-за отсутствия юзер агента и прочих ненужных заголовков.
Код:

Local lines:String = LoadString("http::forum.boolean.name")
Print lines

Метод для бацек
Код:

Global HttpHost:String = "forum.boolean.name" ' Именно хост. Без всяких там http и указания пути
Global HttpPort:Int = 80 ' Ну тут понятно
Global HttpGet:String = "/" ' Собсно гет запрос


'# Соединяемся
Local sock:TSocket = CreateTCPSocket()

If Not sock.Connect(HostIp(HttpHost), HttpPort) Then
        RuntimeError("OH SHI~~!") ' хуИта
EndIf

Local stream:TSocketStream = CreateSocketStream(sock)


' # Шлём
WriteLine(stream, "GET /" + HttpGet + " HTTP/1.0~nHost: " + httpHost + "~nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0~n~n")

' # Принимаем ответ
Local buff:String
While Not Eof(stream)
        buff:+ReadLine(stream) + "~n"
Wend

' # Открыл? Закрой!
sock.Close()
stream.Close()

'# Ну и чо там у нас
Print buff

Ток надо ещё будет заголовки отпилить. Ориентируйся на первую пустую строку.

Nex 01.03.2014 11:37

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Как юзать шрифты в БлитзМаксе?
LoadFont есть, но это как вспомогательная функция. Сам шрифт это как я понял модуль brl.freetypefont?

Загружаю свой шрифт, вывожу текст и возникают странные вещи.
Выводим текст из переменной и с кириллицей все "ок". Выводим текст из файла и с кириллицей борода - каракули в стиле ansi юникода. При использовании utf-8 тоже самое только каракули другие. При этом текст из файла в дебаге в нормальной кодировке.
Ради интереса скидываю русскоязычный текст из переменной в файл и в файле оказываются вообще непонятные символы. Текст "Автоматическая дверь" превращается в "2B><0B8G5A:0O 425@L".

Так же с файловой системой лажа какая то. Хочу открыть директорию и получить список файлов. ReadDir (CurrentDir ()) возвращает хендл директории, но NextFile () уже ничего не возвращает.

В общем как быть, как жить? Подскажите :)

Жека 01.03.2014 16:52

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
1. Шрифт: подключён ли нужный модуль?
Import brl.freetypefont
Использование:
Код:

Global fontText:TImageFont = LoadImageFont("data\fnt\fontText.ttf", 13)
SetImageFont(fontText)

2. Текст: есть функции LoadText и SaveText. Просто сохраняй файлы с русскими буквами в utf-8, тогда LoadText прочитает нормально русский.
Требуется
Import brl.textstream

3. Файлы: модули подключены?
Import brl.stream
Import brl.filesystem

Nex 02.03.2014 09:35

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от Жека (Сообщение 275717)
1. Шрифт: подключён ли нужный модуль?
Import brl.freetypefont
Использование:
Код:

Global fontText:TImageFont = LoadImageFont("data\fnt\fontText.ttf", 13)
SetImageFont(fontText)

2. Текст: есть функции LoadText и SaveText. Просто сохраняй файлы с русскими буквами в utf-8, тогда LoadText прочитает нормально русский.
Требуется
Import brl.textstream

3. Файлы: модули подключены?
Import brl.stream
Import brl.filesystem

Все нужные модули подключены. Файлы в директории все равно не читает.

LoadText (url:Object)
Как это понимать? Почему url не String или TStream? И что передавать в этот параметр? :(

надо наверно на манки переходить...

Жека 03.03.2014 07:54

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
>> Все нужные модули подключены. Файлы в директории все равно не читает.

Путь содержит русские символы? Если да то увы, с русскими не пашет.

>> LoadText (url:Object)
Код:

Local text$ = LoadText("data.txt")
Ещё на всякий случай: Если у тебя задумка читать из файла названия других файлов и открывать их, то пригодится TRIM:
Код:

Local text:String = LoadText("data.txt")
Local arr:String[] = text.Split("~r~n")
For Local k:Int = 0 Until arr.Length
    Local s:String = Trim(arr[k])
    Local file:TStream = ReadFile(s)
        '
        '
        CloseFile(file)
Next

>> надо наверно на манки переходить...

там с файлами особо ничего не поделаешь, нет таких функций.

Nex 04.03.2014 15:26

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от Жека (Сообщение 275876)
Путь содержит русские символы? Если да то увы, с русскими не пашет.

Путь из английских символов.
Вот код из хелпа:
Код:

' readdir.bmx
dir = ReadDir("C:")
If Not dir RuntimeError "failed to read current directory"

Repeat
        t:String = NextFile(dir)
                DebugLog t
        If t="" Exit
        If t="." Or t=".." Continue

Forever
CloseDir dir

Возвращает только хенлд директории и все. Цикл на первом же проходе прекращается. t ничему не равно. Пробовал даже запускать с админ правами.

Цитата:

Сообщение от Жека (Сообщение 275876)
Ещё на всякий случай: Если у тебя задумка читать из файла названия других файлов и открывать их, то пригодится TRIM:

Из файла считываются путь до картинки объекта и описание предмета (Аптечка, Фонарик и тд.)

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

Жека 05.03.2014 06:32

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Да не должно костылей быть с файлами. У тебя БМакс новый? (хз может в каком-то билде была проблема)

1. Попробуй закомментировать подключение модулей, чтобы по дефолту подключались все, вдруг забыл какой-то.
2. Какую конкретно директорию ты пытаешься прочитать? Попробуй читать директорию из другого раздела диска, не из системного.

Черный крыс 05.03.2014 15:45

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
1) Попробуй LoadDir()
2) FreeTypeFont - в топку. Есть мое решение шрифтов, более быстрое и с большими возможностями ( ищи в разделе "модули" )

LLI.T.A.L.K.E.R. 12.05.2014 05:07

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
не актуально - проблема решена: http://forum.boolean.name/showthread...488#post280488
но архив у кого есть - можете передать?


ни у кого не осталось? PhysX архив примеров для BMax?

BMax examples and files: http://files.swargo.com/render/BMaxExemples.rar

нужно поглядеть на функцию (пример использования):
pxClothGetNormals (Cloth %, nbank *) - fills bank nbank with normals of Cloth vertices. It is used for an update of Cloth in BMax. See example!

Code013 21.10.2014 15:57

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Не работают битовые операции как в Blitz3D.
Например: Print ($01 And $ff) = 1 (в Blitz3D)
в BM Print ($01 And $ff) = 255
Тут другие команды работы с битами?
Подскажите кто знает.

Randomize 21.10.2014 16:01

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от Code013 (Сообщение 288339)
Не работают битовые операции как в Blitz3D.
Например: Print ($01 And $ff) = 1 (в Blitz3D)
в BM Print ($01 And $ff) = 255
Тут другие команды работы с битами?
Подскажите кто знает.

And = &
Or = |
Xor = ~

Code013 21.10.2014 16:06

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Спасибо Randomize!

Jlemyp 18.11.2014 20:51

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Всем привет. 2 года назад изучал Blitz3D и с сетью проблем не возникало.Сейчас решил пощупать BlitzMax и не как не разберусь с сетью.
Помогити,напишите простой пример сервера и клиента с коментариями,что бы я смог понять от чего отталкиваться.
пример: запущен сервер и клиент.Клиент говорит серверу что хочет кинуть игральный кубик.Сервер принемает запрос на бросание кубика и бросает его,а результат отправляет клиенту.
Весь форум прочесал но точного понятия что к чему не нашел.
Буду очень блогодарен.

moka 18.11.2014 23:33

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Код за тебя я думаю мало кто писать будет.
А вот помочь с конкретными проблемами - думаю сможем.

Главное начни с простого, сделай два новых приложения, сервер и клиент (пустых), и создай сокет на сервере по порту, и соедени клиент с сервером.

Далее, подумай как логически поддерживать несколько клиентов. Это чисто логика.

Затем уже думай на счет игрового цикла на сервере и клиенте и синхронизации данных.

Начни с простого, по чуток пиши, не спеши. Как будут проблемы, попробуй 5 раз по разному, если не получилось, иди выпей чаю, и снова по разному попробуй, 10 в этот раз. Ну если реально совсем ничего не выходит. То либо стоит бросить это дело (слабый вариант), либо попробовать еще 20 раз, и уж потом постить на форум конкретно сформулированный вопрос о том что и как не выходит, с конкретным кодом (не 100500 строк, а минимум, меньше - лучше), и описанием конкретной проблемы, что пробовал для решения и где думаешь проблема.

По факту скажу, если ты начнешь следовать подобному методу в разработке как начинающий, то у тебя и вопросов по сути возникать не будет, т.к. ты просто будешь сам находить решение, получать опыт и т.п.
Но если ты не будешь пытаться сам, то да, будут вопросы типа: "сделайте мне игру", или "сделайте мою домашнюю работу".

Jlemyp 19.11.2014 00:09

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Спасибо за совет.Действительно, глаза хотят а руки боятся.Просто я думал, что можно простой сервер написать в строк 7,но видел здесь примерчик что он как то в Типах и все такое.Нет описания на русском операторов связаных с сетью,что бы понять что за что отвечает.Если бы было,мне бы стало проще.Хелп на английском,может у меня и версия BlitzMax-а низкая ( 1.45 ) Начну стараться и грызть науку.


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

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