Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Как вертеть картинку?????????? Добавлено: 11.12.03 11:40  

Автор вопроса:  Ra$cal | Web-сайт: www.rascalspb.narod.ru | ICQ: 8068014 

Как вертеть картинку на определённый угол (нужно для игры), а также как сделать какой нибудь цвет прозрачным. Очень надо. Заранее спасибо

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 Crusty



Вопросов: 3
Ответов: 6
 Профиль | | #1 Добавлено: 11.12.03 14:05

Значит так. Кидаешь на форму PictureBox с именем picRot и 2 чекбокса с именами chkRotMask и chkRotSmooth. Первый сглаживает рисунок, второй убирает траспарент-фон.

Если код не пойдёт то дам исходник своей игрушки подобного рода, но у меня там заминка вышла - не знаю как осуществлять движение по углу.

Private Declare Function FoxBrightness Lib "FoxCBmp.dll" (ByVal DstDC As Long, ByVal DstBmp As Long, ByVal SrcDC As Long, ByVal SrcBmp As Long, ByVal TransColor As Long, ByVal Brightness As Long, ByVal Flags As Long) As Long

Private Declare Function FoxBlendIn Lib "FoxCBmp.dll" (ByVal DstDC As Long, ByVal DstX As Long, ByVal DstY As Long, ByVal SrcDC As Long, ByVal SrcBmp As Long, ByVal TransColor As Long, ByVal Alpha As Byte, ByVal Flags As Long) As Long

Private Declare Function FoxRotate Lib "FoxCBmp.dll" (ByVal DstDC As Long, ByVal DstX As Long, ByVal DstY As Long, ByVal SrcDC As Long, ByVal SrcBmp As Long, ByVal TransColor As Long, ByVal Alpha As Double, ByVal Flags As Long) As Long

Private Declare Function GetTickCount Lib "kernel32" () As Long

Dim CurX As Long, CurY As Long

Dim OldTime As Long

Dim rotates As Integer

Private Sub chkRotMask_Click()

HScroll

End Sub

Private Sub chkRotSmooth_Click()

HScroll

End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)

Select Case (KeyAscii)

Case 52

rotates = rotates - 2

Case 54

rotates = rotates + 2

End Select

'52 и 54 - цифры 4 и 6 на нампаде

End sub

Private Sub Form_Load()

HScroll

End Sub

Public Sub HScroll()

Me.Cls

OldTime = GetTickCount

FoxRotate Form1.hDC, 200, 200, picRot.hDC, picRot.Image.Handle, &H8000000F, rotates, chkRotMask + chkRotSmooth * 2

Caption = GetTickCount - OldTime

Me.Refresh

End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #2
Добавлено: 11.12.03 20:16

Всё бы ничего, но что это за библиотека foxcbmp.dll

Ответить

Номер ответа: 3
Автор ответа:
 Cooller



Вопросов: 10
Ответов: 28
 Профиль | | #3 Добавлено: 21.12.03 03:25

Если у кого есть ета foxcbmp.dll скинте пжлта на cooller@hotmail.ru. Буду рад.

Ответить

Номер ответа: 4
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 21.12.03 03:54

А на Яндексе поискать слабо? Тот первым делом выводит ссылку http://www.vbnet.ru/activex/activexdownload.asp?id=55

Там лежит архив с контролом, к которому прилагается эта DLL

Ответить

Номер ответа: 5
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #5
Добавлено: 21.12.03 05:49

смотри мою тему "Вертушка" - тот же самый вопрос. А воопще, если пишешь под XP или 2000 то лучше юзай PlgBlt - выигрыш во времени огромен, тк тебе надо просто тупо через синус прямоугольник вертеть. А вообще, АДМИНЫ!!! Надо бы факи создать...

Ответить

Номер ответа: 6
Автор ответа:
 Cooller



Вопросов: 10
Ответов: 28
 Профиль | | #6 Добавлено: 23.12.03 01:42

А чё делать если допусим надо вертеть не картинку, а допустим Textbox или CommandButton ??? Возможно ли это решить в VB :-|

Ответить

Номер ответа: 7
Автор ответа:
 Cooller



Вопросов: 10
Ответов: 28
 Профиль | | #7 Добавлено: 23.12.03 01:53

Насчёт вертелки рисунков...Foxcbmp вещь хорошая только тормознутая немного... Может проще будет функцию написать для поворота...А?...А чё любую точку картинки можно найти с помощью Point надо только повернуть её на определённое кол-во градусов относительно Pic.left=0:Pic.top=0 :)

Ответить

Номер ответа: 8
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #8
Добавлено: 23.12.03 05:58

Если надо вертеть textbox или button, тебе придется их самому рисовать, как минимум. Как максимум - писать свой контрол

Ответить

Номер ответа: 9
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #9
Добавлено: 23.12.03 12:05

Cooler! У меня есть компонент который вертит Label.

Ответить

Номер ответа: 10
Автор ответа:
 StrikeR



ICQ: 151819 

Вопросов: 32
Ответов: 110
 Web-сайт: www.highlight.ee
 Профиль | | #10
Добавлено: 23.12.03 14:07
2 Crusty: che-to tvooi primer ne pashet

Ответить

Номер ответа: 11
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #11
Добавлено: 23.12.03 21:58

Вот пример кода, вращающего картинку на определённый угол. Нужно: два пикчербокса и одно текстовое поле, кнопка.

-------------КОД---------------

Const Pi = 3.14159

Private Sub Command1_Click()

Picture2.Cls

For x = 1 To Picture1.ScaleWidth

For y = 1 To Picture1.ScaleHeight

R = Sqr(x ^ 2 + y ^ 2)

Angle = Atn(y / x)

New_Angle = Angle + (Text1.Text * Pi / 180)

New_x = R * Cos(New_Angle)

new_y = R * Sin(New_Angle)

Picture2.PSet (Picture2.ScaleWidth / 2 + New_x, Picture2.ScaleHeight / 2 + new_y), Picture1.Point(x, y)

Next y

Next x

End Sub

Private Sub Form_Load()

Text1.Text = 0

Command1.Value = True

End Sub

------------Конец-----------------

Недостатки: у меня очень медленно работает...

Ответить

Номер ответа: 12
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #12
Добавлено: 24.12.03 10:59

а я сделал вращающийся куб (правда с небольшими глюками) с картинками на сторонах. и все это без директов а простой PlgBlt и идёт без тормоза. (алгоритм врашения правда мне помогли здорово напсать)

Ответить

Номер ответа: 13
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #13
Добавлено: 25.12.03 12:22

Вот что получилось из PlgBlt. Если кто это доработает, пишите. Попробуйте подставлять xx в разных P

Сделайтн 2 пикча. В первый киньте какую-нибудь иконку. Ещё нужон таймер. Експериментируйте!!!

Option Explicit

Private Declare Function PlgBlt Lib "gdi32" (ByVal hdcDest As Long, lpPoint As POINTAPI, ByVal hdcSrc As Long, ByVal nXSrc As Long, ByVal nYSrc As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hbmMask As Long, ByVal xMask As Long, ByVal yMask As Long) As Long

Private Type POINTAPI

x As Long

y As Long

End Type

Dim xx, yy

Private Sub Timer1_Timer()

Dim Pt(0 To 2) As POINTAPI

xx = xx + 1

Pt(0).x = 30

Pt(0).y = 10

Pt(1).x = 300

Pt(1).y = xx

Pt(2).x = 0

Pt(2).y = 300

PlgBlt Picture2.hDC, Pt(0), Picture1.hDC, 0, 0, 300, 300, ByVal 0&, ByVal 0&, ByVal 0&

End Sub

Ответить

Номер ответа: 14
Автор ответа:
 Cooller



Вопросов: 10
Ответов: 28
 Профиль | | #14 Добавлено: 25.12.03 12:40

to Morpheus : скинь код пожлт, очень интересно посмотреть

to Ra$cal : тоже если не в лом скинь LABEL

А вообще без контролов не как нельзя??? Ведь контролы они тоже на VB пишутся :)

Ответить

Номер ответа: 15
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #15
Добавлено: 25.12.03 13:45

2 Cooler: Проверь почту. Если чё не пашет, пиши, помогу.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам