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)

Greenstyler 08.02.2011 22:17

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

Код:

Global Font:TImageFont

Graphics 800, 600

Font = LoadImageFont( "Arial", 30 )
SetImageFont( Font )

Repeat

DrawText( "Текст.", 400, 300 )

Flip
Cls

Until AppTerminate()

В результате получаю лишь точку на экране, все русские буквы отсутствуют. Пробовал прописывать шрифт и как ArialCyr, и как Airal.ttf - без разницы. То же самое и с шрифтами, скачанными из интернета, и с остальными системными.
Прошу помочь. И, если где-то на форуме есть решение, просьба кинуть линк - поиск не помог, проблема обсуждалась не раз, но либо так и не была решена, либо была решена на Blitz3d, а это не то.

SBJoker 08.02.2011 22:31

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

baton4ik 08.02.2011 22:33

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Добавь
Import brl.FreeTypeFont
в начале
"Arial" измени на "Arial.ttf" и кинь шрифт в папку с проектом.

Greenstyler 08.02.2011 23:08

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
baton4ik
Спасибо, помогло. Теперь будем экспериментировать на скачанных шрифтах...

Amatsu 19.02.2011 20:47

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Суперстрикт рулит! ^^ Это так, вопль души *убежал дальше копать туториалы по работе с пользовательскими типами*

Amatsu 19.02.2011 20:57

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Вот, вопрос, можете объяснить, в чем разница между методом (Method) и функцией (Function) внутри описания пользовательского типа?

Reks888 19.02.2011 21:44

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

...
Method GetSave()
Return Save
End Method
...
map1.GetSave()
map2.GetSave()
Так map1 вернет свой map1.Save, а map2 вернет свой map2.Save.
Функции внутри типов ничем не отличаются от функций снаружи типов, кроме того что эти функции можно вызвать от типа(вроде TMap.MyFunc() или map1.MyFunc())
Она НЕ ДАЕТ доступа к переменным внутри типа, тоесть придется писать что-то вроде
Цитата:

Function Create()
t.TMap=New TMap
t.Save=100500
Return t
End Function
Удобно использовать для функций создания и деструкта элемента типа. Для остального - лучче методы

Amatsu 19.02.2011 21:55

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Спасибо большое :) То что нужно

baton4ik 19.02.2011 22:03

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

Randomize 19.02.2011 23:37

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Функции внутри типа это обычные функции, только они ещё имеют быстрый доступ к внутренним глобальным переменным внутри типа.
PHP код:

Type Foo
  
Global Bar:Int 0
  
Function IncBar()
    
Bar:+1
  End 
Function
EndType

Foo
.Bar 1
Foo
.IncBar()
Foo.IncBar()

Print 
Foo.Bar 'выдаёт 3 

Методы вызываются непосредственно для экземпляра типа.
Псевдокод:
PHP код:

Type Мужык
   Field x
:int 0
   Field y
:int 0

   Method ИдиВверх
()
     
y:-1
   EndMethod
   Method ИдиВниз
()
     
y:+1
   EndMethod

   Method ИдиВЛево
()
     
x:-1
   EndMethod
   Method ИдиВПраво
()
     
x:+1
   EndMethod
EndType


Local SuperHero
:Мужык = New Мужык
SuperHero
.ИдиВниз()
SuperHero.ИдиВниз()
SuperHero.ИдиВниз()
SuperHero.ИдиВЛево()
SuperHero.ИдиВЛево()

Print 
SuperHero." , " SuperHero.' выдаёт -2 , 3 


Amatsu 20.02.2011 00:51

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

Amatsu 20.02.2011 09:43

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Пытаюсь писать свой пользовательский тип с функциями и методами. При компиляции, если я обратился к функции CreateBattleCharacter, выдает Attempt to access field or method of Null object на строчке
Код:

bchar_list.AddLast bchar
Если не трудно, подкиньте идею, где может быть косяк. Сам код:
Код:

Global bchar_list:TList = New TList
Global bchar_list_count:Int
Type TBattleCharacter
  Field model:Int, anim_mesh:Int
  Field selected:Byte
  Field name:String
  Field level:Int, life:Int, life_max:Int

 
  ' Создание персонажа
  Function CreateBattleCharacter:TBattleCharacter(variant:String, selected:Byte, level:Int, life:Int)
    Select variant
            Case "player"
        Local bchar:TBattleCharacter = New TBattleCharacter

        ' Определение переменных
        bchar.selected = selected
            bchar.level = level

        ' Определение постоянных
        bchar.name = variant

        ' Определение параметров
        bchar.life_max = 60 + bchar.level * 27
        bchar.life = life
        If bchar.life > bchar.life_max
          bchar.life = bchar.life_max
        ElseIf bchar.life < 1
          bchar.life = 1
        EndIf

        ' Загрузка моделей
        bchar.model = xCreateCube()
        xScaleMesh bchar.model, 5, 14, 5
        xEntityAddBoxShape bchar.model, 10

        bchar_list.AddLast bchar
        bchar_list_count:+1
    End Select
  End Function

  ' Обработка персонажа
  Method Update()
    If selected = 1 Then MouseLook(model)
  End Method

End Type
End


baton4ik 20.02.2011 10:21

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
bchar_list = CreateList()
И лучше сделай не глобальный список, а глобальную переменную типа для него:

Type TBattleCharacter
Global list:TList = CreateList()

'...

TBattleCharacter.list.AddLast bchar

'...

Amatsu 20.02.2011 10:42

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

Сообщение от baton4ik (Сообщение 179705)
bchar_list = CreateList()
И лучше сделай не глобальный список, а глобальную переменную типа для него:

Type TBattleCharacter
Global list:TList = CreateList()

'...

TBattleCharacter.list.AddLast bchar

'...

Спасибо, помог второй вариант :)

JeanWinters 20.02.2011 17:25

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


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

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