Проблема

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

AT8675309
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 20.01.2004 (Вт) 13:20

Проблема

Сообщение AT8675309 » 20.01.2004 (Вт) 19:28

У меня проблема в DirectDraw7:
у Stdfonts есть параметр шрифта size,
а мне бы как нибудь получить из них width и height.

Помогите кто сможет!

AT8675309
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 20.01.2004 (Вт) 13:20

*

Сообщение AT8675309 » 20.01.2004 (Вт) 20:12

Я о другом вообще.
Как бы мне измерить размеры выведенного текста, относительно текущего шрифта, а то GetTextExtentPoint32 как-то неправильно работает ?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 21.01.2004 (Ср) 15:58

Можно сделать очень просто. Создать на форме НЕВИДИМЫЙ Label со свойством AutoSize=True. Присваиваем:
Код: Выделить всё
Label.Caption="наш текст"
Label.FontSize=FS               'Новый размер фонта

TextWidth=Label.Width        'Считываем результат
TextHeight=Label.Height

AT8675309
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 20.01.2004 (Вт) 13:20

Это несерьёзно

Сообщение AT8675309 » 22.01.2004 (Чт) 13:49

что такое BBcode ?
Это несерьёзно, тек как я уже на dx всё пишу и в форму совать label мне бы не хотелось бы. GetTextExtentPoint32 даёт размер нормально, но в малом размере(без учёта размера шрифта).
Как бы мне мою проблему решить ?
И ещё, если ты в курсе, то как распознать пересечения отрезков, шара на четырёхугольник ?
А то я качал формулы, а они как-то не пашут.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 22.01.2004 (Чт) 20:11

Это несерьёзно, тек как я уже на dx всё пишу и в форму совать label мне бы не хотелось бы.


Программа пишется ради серьезности, или чтобы работала? Понимаю, если бы вариант не подошел, скажем, по быстродействию. Повторюсь, Label - НЕВИДИМЫЙ (Label1.Visible=False), и работе DirectX он никак не помешает.

как распознать пересечения отрезков, шара на четырёхугольник ?


Шар - 3D фигура, четырехугольник - 2D. Несколько нетипично. Вопрос точно сформулирован?

AT8675309
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 20.01.2004 (Вт) 13:20

Тема

Сообщение AT8675309 » 22.01.2004 (Чт) 20:28

Цитата:
[/b]
Программа пишется ради серьезности, или чтобы работала? Понимаю, если бы вариант не подошел, скажем, по быстродействию. Повторюсь, Label - НЕВИДИМЫЙ (Label1.Visible=False), и работе DirectX он никак не помешает.

Я же говорил про gettextextendpoints32.... Но ладно раз другого ничего нет будем пользоваться средствами, которые имеем на текущий момент....

Цитата:
[/b]
Шар - 3D фигура, четырехугольник - 2D. Несколько нетипично. Вопрос точно сформулирован?

Шар(шарик) 2d(в смысле круг(со всеми точками)).
Как - что по точкам круг, сверять тормозно.
А у меня ещё тормоза из-за частого "Лочинья"(Lock). Говорят, что есть rtlMoveMemory и говорят что это быстрее. Может что посоветуешь ?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 23.01.2004 (Пт) 10:19

Вот этот код закинь в форму:
Код: Выделить всё
Option Explicit
Dim posX As Integer, posY As Integer, Alfa As Single
Dim SinA As Single, CosA As Single

Private Sub Form_Load()
  Me.ScaleMode = vbPixels
  Me.Width = 400 * Screen.TwipsPerPixelX
  Me.Height = 400 * Screen.TwipsPerPixelY
  posX = 200
  posY = 180
  Alfa = -2
  Me.Show
  RePaint
End Sub

Private Sub RePaint()
  Me.Cls
  SinA = Sin(Alfa)
  CosA = Cos(Alfa)
  Me.Circle (posX, posY), 5, 0
  Me.Line (posX, posY)-(posX + SinA * 640, posY - CosA * 640), 0
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = 1 Then
    posX = X
    posY = Y
  ElseIf Button = 2 Then
    Select Case Y - posY
      Case Is > 0: Alfa = 3.1415 - Atn((X - posX) / (Y - posY))
      Case Is < 0: Alfa = -Atn((X - posX) / (Y - posY))
      Case 0: If X > posX Then Alfa = 3.1415 / 2 Else Alfa = -3.1415 / 2
    End Select
  End If
  RePaint
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Static RL As Single, FB As Single
  Me.Caption = "FB:" & Str$(difFB(X, Y)) & "   RL:" & Str$(difRL(X, Y))
End Sub

Private Function difRL(X As Single, Y As Single) As Single
  difRL = SinA * (Y - posY) + CosA * (X - posX)
End Function

Private Function difFB(X As Single, Y As Single) As Single
  difFB = SinA * (X - posX) - CosA * (Y - posY)
End Function


Это пример, который демонстрирует работу двух простых функций: "difRL" и "difFB". Обе возвращают относительную позицию точки с абсолютными координатами X и Y в системе координат, связанной с вектором. То есть например если вектор поместить в центре машины и направить вперед, первая функция позволяет определить впереди или сзади от машины находится любой объект (точка) и на каком расстоянии. Вторая - слева\справа. Если вспомнить, что круг - множество точек, равноудаленных от центра, несложно применить эти ф-ции для коллизий с кругом.
На счет проблем "Лочинья" не знаю - никогда с седьмым DX не работал. rtlMoveMemory не пользовался.

AT8675309
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 20.01.2004 (Вт) 13:20

Спасибо

Сообщение AT8675309 » 26.01.2004 (Пн) 15:47

Спасибо, обязательно посмотрю в offline'е.


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38

    TopList