Глупый (возможно) вопрс

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
PatriotIK
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 09.08.2004 (Пн) 12:00
Откуда: Город герой Москва

Глупый (возможно) вопрс

Сообщение PatriotIK » 21.09.2004 (Вт) 21:49

:oops:
мда...
Народ мож кто знает как мне, зделать следуещее:
Вот хотел зделать, тайловое поле (в игре) состоящее из ромбоформых тайлов. Все красиво, вот токо как мне выделить мышкой именно один конкретный тайл для редактирования.Одним словом, можно ли как нибудь, без лишнего гемароя, а главное чтоб быстро, попасть мышкой именно по конкретной картинке, тоесть в ее граници.
Разумеется что сама картинка квадратная, но меня интересует ромбик, ограниченный допустим черным фоном.
Вообщем то все.

ПЛИЗ народ помогите очень прошу :)
Visual Basic остольное не важно!

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 22.09.2004 (Ср) 6:56

Попробуй так: PtInRegion, тока сначала надо создать этот регион))
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 22.09.2004 (Ср) 7:07

Или так:
проверяй в каком прямоугольнике курсор, а потом Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As Long, ByVal nXPos As Long, ByVal nYPos As Long) As Long даст тее цвет, если черный(rgb(255,255,255)) значит попал))))
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 22.09.2004 (Ср) 16:00

Я здесь чуть-чуть преобразовал код из примера в "API-Guide" и т.о. получил ф-цию CreateRombPoligon:

Код: Выделить всё
Public Function CreateRombPoligon(ByVal X As Long, ByVal Y As Long, ByVal hsize As Long, ByVal vsize As Long)
    Dim poli(1 To 4) As COORD
    poli(1).X = X + hsize / 2
    poli(1).Y = Y
    poli(2).X = X + hsize
    poli(2).Y = Y + vsize / 2
    poli(3).X = X + hsize / 2
    poli(3).Y = Y + vsize
    poli(4).X = X
    poli(4).Y = Y + vsize / 2
    CreateRombPoligon = CreatePolygonRgn(poli(1), 4, ALTERNATE)
End Function

где:
x, y - top и left ромба,
hsize, vsize его высота и ширина
-----------
пример использования:
Код: Выделить всё
Private Type COORD
    X As Long
    Y As Long
End Type
Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As Any, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As Long
Private Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As Long
Private Declare Function PtInRegion Lib "gdi32" (ByVal hRgn As Long, ByVal X As Long, ByVal Y As Long) As Long

Const ALTERNATE = 1 ' ALTERNATE and WINDING are
Const WINDING = 2 ' constants for FillMode.
Const BLACKBRUSH = 4 ' Constant for brush type.
Const WHITE_BRUSH = 6
    Dim hBrush1 As Long, hRgn1 As Long
    Dim hBrush2 As Long, hRgn2 As Long

Private Sub Form_Load()
    Me.ScaleMode = vbPixels
    hBrush1 = GetStockObject(BLACKBRUSH)
    hRgn1 = CreateRombPoligon(1, 1, 200, 200)
    If hRgn1 Then FillRgn Me.hdc, hRgn1, hBrush1
    hBrush2 = GetStockObject(WHITE_BRUSH)
    hRgn2 = CreateRombPoligon(200, 1, 200, 100)
    If hRgn2 Then FillRgn Me.hdc, hRgn2, hBrush2
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If PtInRegion(hRgn1, X, Y) Then
    Caption = "Активен 1"
Else
    If PtInRegion(hRgn2, X, Y) Then
        Caption = "Активен 2"
    Else: Caption = ""
    End If
End If
End Sub

А вообще для игры, если пользоваться этим методом, то необходимо создать масив регионов, и поочередно все проверять на PtInRegion. А еще лучше КЛАСС создать.
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...


Вернуться в Visual Basic 1–6

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

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

    TopList