DX9绘图

前边讲了一些绘图基础,看不懂不要紧,其实我也看不懂哦。数学基础不好的话,确实不容易看懂,但只要懂的调用,能完成想要做的工作,那就马马虎虎吧,若是深入研究的话,建议买本计算机视觉艺术,计算机图形图像类的教材看看。
接下来,我们利用冷风(CoolWind2D)游戏引擎,绘制点,线,正方形,圆,效果图如下:

新建Form1,代码如下:

Private Sub Form_Load()'新手注意:游戏编程中,
'通常将窗体的 BorderStyle 设置为“Fixed single”即不允许改变窗体大小
'通常将窗体的 MinButton 设置为“True”即允许最小化
'通常将窗体的 MaxButton 设置为“False”即禁止最大化'初始化引擎并设置引擎初始化窗体和引擎分辨率,但最好是电脑常用的分辨率比如 640,480 、 800,600 、 1024,768 、 1366,768
CWVBDX9Initialization Me, 800, 600, CW_Windowed
'初始化引擎(目标窗体,横向分辨率,纵向分辨率,窗口模式/全屏模式)Do While CWGameRun = True         '进入游戏循环If CWD3DDevice9.TestCooperativeLevel = 0 And Me.WindowState <> 1 Then  '检测是否可以渲染(设备正常并且窗体未最小化时渲染)CWBeginScene    '准备好绘制场景'关于颜色:可以使用BAS模块中已经设置好的常用颜色,也可用CWColorARGB函数自行转换,A分量为不透明度,RGB分量对应的颜色请参考RGB颜色表'关于颜色权重:颜色权重越高,该点的颜色在渐变过程中所占的区域就越大'****************这里输入各种绘图代码**********CWDrawPoint 50, 50, CWRed'画点(横坐标,纵坐标,颜色)CWDrawLine 80, 50, 150, 50, CWRed'画线(起点横坐标,起点纵坐标,终点横坐标,终点纵坐标,颜色)CWDrawLineEx 200, 50, 350, 50, 1, 2.5, CWRed, CWBlue'画渐变色线(起点横坐标,起点纵坐标,终点横坐标,终点纵坐标,起点颜色权重,重点颜色权重,起点颜色,终点颜色)CWDrawHRect 400, 10, 150, 80, CWYellow'画空心矩形(起点横坐标,起点纵坐标,宽度,高度,颜色)CWDrawSRect 600, 10, 150, 80, CWGreen'画实心矩形(起点横坐标,起点纵坐标,宽度,高度,颜色)CWDrawSRectXGC 50, 100, 150, 150, 1.5, 1, CWPurple, CWCyan'画横向渐变色实心矩形(起点横坐标,起点纵坐标,宽度,高度,左边颜色权重,右边颜色权重,左边颜色,右边颜色)CWDrawSRectYGC 250, 100, 150, 150, 1, 1.5, CWBlue, CWYellow'画纵向渐变色实心矩形(起点横坐标,起点纵坐标,宽度,高度,上边颜色权重,下边颜色权重,上边颜色,下边颜色)CWDrawSRectXCGC 450, 100, 150, 150, 2, 1, CWRed, CWYellow'画横向中心渐变色实心矩形(起点横坐标,起点纵坐标,宽度,高度,中心颜色权重,两边颜色权重,中心颜色, 两边颜色)CWDrawSRectYCGC 650, 100, 150, 150, 2, 1, CWPurple, CWBlue'画纵向中心渐变色实心矩形(起点横坐标,起点纵坐标,宽度,高度,中心颜色权重,两边颜色权重,中心颜色, 两边颜色)CWDrawSRectCGC 30, 300, 150, 150, 1.5, 1, CWRed, CWColorARGB(255, 125, 0, 125)'画中心渐变色实心矩形(起点横坐标,起点纵坐标,宽度,高度,中心颜色权重,周边颜色权重,中心颜色, 周边颜色)CWDrawHCircle 300, 400, 100, CWBlue'画空心圆(圆心横坐标,圆心纵坐标,半径,颜色)CWDrawSCircle 500, 500, 100, CWPurple'画实心圆(圆心横坐标,圆心纵坐标,半径,颜色)CWDrawSCircleEx 620, 400, 150, 3, 1, CWHA_Yellow, CWRed'画中心渐变色实心圆(圆心横坐标,圆心纵坐标,半径,中心颜色权重,周边颜色权重,中心颜色, 周边颜色)'***********************绘图代码结束***********      CWPresentScene   '呈现绘制的场景'*******************************以下为固定写法,不要轻易改动***********************************Else                 '当不满足渲染条件时CWResetDevice       '修复设备End IfLoopCWVBDX9Destory     '销毁CoolWind引擎End '退出
'*******************************以上为固定写法,不要轻易改动***********************************End Sub

BAS模块如下:(完整版VBDX9BAS.bas)

'******************************************************************************************************************
'   CoolWind2D 引擎完全开源免费,但仅供技术交流,请勿用于任何商业用途
'
'   作者名单:
'           VBDX9BAS.BAS:hhyjq007(百度贴吧 VB吧 http://tieba.baidu.com/f?kw=vb)
'           VBDX9TLB.TLB:acme_pjz(VBGOOD论坛 http://www.vbgood.com)
'
'   技术支持:
'           嘿嘿菌 hhyjq007:CoolWind2D原作者,建立引擎框架和实现基础功能
'           YY菌{3EA3E263-6945-4E1F-A573-492FB5A7799E}:修复了大量BUG和增加大量新功能
'
'   有任何的意见建议或者疑问可以到百度贴吧VB吧或者VBGOOD论坛发帖讨论,也可以加入CoolWind游戏编程研究会一起讨论
'           CoolWind游戏编程研究会 群号:112915633 欢迎各位游戏编程爱好者的加入
'******************************************************************************************************************Option Explicit     '变量使用前必须声明Public Declare Function CWSplitColor Lib "msvbvm60" Alias "#644" (ByVal Color As CWColorConstants) As CWColor
Public Declare Function GetMem4 Lib "msvbvm60" (ByVal Address As Long, ByRef Value As Any) As Long
Public Declare Function PutMem4 Lib "msvbvm60" (ByVal Address As Long, ByVal Value As Any) As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Function timeGetTime Lib "winmm" () As Long
Public Declare Function timeBeginPeriod Lib "winmm" (ByVal uPeriod As Long) As Long
Public Declare Function timeEndPeriod Lib "winmm" (ByVal uPeriod As Long) As Long
Public Declare Sub ZeroMemory Lib "kernel32" Alias "RtlZeroMemory" (ByRef Destination As Any, ByVal Length As Long)Public Declare Function mciSendStringA Lib "winmm" (ByVal lpstrCommand As String, Optional ByVal lpstrReturnString As String, Optional ByVal uReturnLength As Long, Optional ByVal hwndCallback As Long) As Long
Public Declare Function mciSendStringW Lib "winmm" (ByVal lpstrCommand As Long, Optional ByVal lpstrReturnString As Long, Optional ByVal uReturnLength As Long, Optional ByVal hwndCallback As Long) As Long
Public Declare Function GetShortPathNameW Lib "kernel32" (ByVal LongPath As Long, ByVal ShortPath As Long, ByVal Length As Long) As Long
Public Declare Function GetShortPathNameA Lib "kernel32" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal DX As Long, ByVal DY As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function WindowFromPoint Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function ScreenToClient Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long
Public Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As D3DRECT) As Long
Public Declare Function PtInRect Lib "user32" (lpRect As D3DRECT, ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function GetActiveWindow Lib "user32" () As Long
Public Declare Function joyGetNumDevs Lib "winmm" () As Long
Public Declare Function joyGetPosEx Lib "winmm" (ByVal uJoyID As Long, ByRef pji As JOYINFOEX) As Long
Public Declare Function CombineTransform Lib "gdi32" (ByRef MatOut As CWMatrix, MatLeft As CWMatrix, MatRight As CWMatrix) As LongPublic Declare Function GdipGetImageWidth Lib "gdiplus" (ByVal Image As Long, ByRef Width As Long) As Long
Public Declare Function GdipGetImageHeight Lib "gdiplus" (ByVal Image As Long, ByRef Height As Long) As Long
Public Declare Function GdipBitmapLockBits Lib "gdiplus" (ByVal Bitmap As Long, Rect As Any, ByVal Flags As GpImageLockMode, ByVal Format As Long, LockedBitmapData As GpBitmapData) As Long
Public Declare Function GdipBitmapUnlockBits Lib "gdiplus" (ByVal Bitmap As Long, LockedBitmapData As GpBitmapData) As LongPublic Type POINTAPI    'API鼠标位置类X As LongY As Long
End TypePublic Enum JOYFALGS    'API游戏手柄类JOY_RETURNX = &H1JOY_RETURNY = &H2JOY_RETURNZ = &H4JOY_RETURNR = &H8JOY_RETURNU = &H10JOY_RETURNV = &H20JOY_RETURNPOV = &H40JOY_RETURNBUTTONS = &H80JOY_RETURNRAWDATA = &H100JOY_RETURNPOVCTS = &H200JOY_RETURNCENTERED = &H400JOY_USEDEADZONE = &H800JOY_RETURNALL = JOY_RETURNX Or JOY_RETURNY Or JOY_RETURNZ Or JOY_RETURNR Or JOY_RETURNU Or JOY_RETURNV Or JOY_RETURNPOV Or JOY_RETURNBUTTONS
End EnumPublic Enum JOYBUTTON    'API游戏手柄类JOY_BUTTON1 = &H1JOY_BUTTON2 = &H2JOY_BUTTON3 = &H4JOY_BUTTON4 = &H8JOY_BUTTON5 = &H10JOY_BUTTON6 = &H20JOY_BUTTON7 = &H40JOY_BUTTON8 = &H80JOY_BUTTON9 = &H100JOY_BUTTON10 = &H200JOY_BUTTON11 = &H400JOY_BUTTON12 = &H800JOY_BUTTON13 = &H1000JOY_BUTTON14 = &H2000JOY_BUTTON15 = &H4000JOY_BUTTON16 = &H8000JOY_BUTTON17 = &H10000JOY_BUTTON18 = &H20000JOY_BUTTON19 = &H40000JOY_BUTTON20 = &H80000JOY_BUTTON21 = &H100000JOY_BUTTON22 = &H200000JOY_BUTTON23 = &H400000JOY_BUTTON24 = &H800000JOY_BUTTON25 = &H1000000JOY_BUTTON26 = &H2000000JOY_BUTTON27 = &H4000000JOY_BUTTON28 = &H8000000JOY_BUTTON29 = &H10000000JOY_BUTTON30 = &H20000000JOY_BUTTON31 = &H40000000JOY_BUTTON32 = &H80000000
End EnumPublic Type JOYINFOEX    'API游戏手柄类dwSize As LongdwFlags As JOYFALGSdwXpos As LongdwYpos As LongdwZpos As LongdwRpos As LongdwUpos As LongdwVpos As LongdwButtons As JOYBUTTONdwButtonNumber As LongdwPOV As LongdwReserved1 As LongdwReserved2 As Long
End TypePublic Type Rect    '长整数矩形类Left As LongTop As LongRight As LongBottom As Long
End TypePublic Type GpRect    'GDI+矩形类X As LongY As LongWidth As LongHeight As Long
End TypeConst GpPixelFormat32bppARGB& = &H26200APublic Enum GpImageLockModeGpImageLockModeRead = 1&GpImageLockModeWrite = 2&GpImageLockModeUserInputBuf = 4&
End EnumPublic Type GpBitmapDataWidth As LongHeight As LongStride As LongPixelFormat As LongScan0 As LongReserved As Long
End TypePublic Type D2DVector   '2D顶点类X As SingleY As SingleZ As SingleRhw As SingleColor As CWColorConstants
'    Specular As Long
'    Tu As Single
'    Tv As Single
End TypePublic Type CWMatrix   '2D矩阵m11 As Single: m12 As Singlem21 As Single: m22 As Singlemdx As Single: mdy As Single
End TypePublic Type CWColor   '颜色类Blue As ByteGreen As ByteRed As ByteAlpha As Byte
End TypePublic Type CWPic       '图片类Tex As Direct3DTexture9PICSize As D3DRECT
End TypePublic Type CWFont      '字体类SNum As Long
End TypePublic Type CWMusic     '音乐类ID As Long
End TypePublic Type CWMusicObj     '音乐类IsLoop As Booleanmc As FilgraphManagermp As IMediaPositionba As IBasicAudiovw As IVideoWindowevt As IMediaEvent
End TypePublic Type CWKeyState      '按键状态类PUP As BooleanPDown As BooleanPUPMoment As BooleanPDownMoment As Boolean
End TypePublic Type CWKeyStateSP        '鼠标滚轮状态类PUP As BooleanPDown As BooleanPUPMoment As BooleanPDownMoment As BooleanRollUP As BooleanRollDown As Boolean
End TypePublic Type CWMouseState        '鼠标类X As SingleY As SingleLeftKey As CWKeyStateRightKey As CWKeyStateMidKey As CWKeyStateSPBackKey As CWKeyStateForwardKey As CWKeyState
End TypePublic Type CWKeyboardState     '键盘类ESC As CWKeyStateF1 As CWKeyStateF2 As CWKeyStateF3 As CWKeyStateF4 As CWKeyStateF5 As CWKeyStateF6 As CWKeyStateF7 As CWKeyStateF8 As CWKeyStateF9 As CWKeyStateF10 As CWKeyStateF11 As CWKeyStateF12 As CWKeyStateInsert As CWKeyStateDelete As CWKeyStatePageUp As CWKeyStatePageDown As CWKeyStateHome As CWKeyStateEnd As CWKeyStateUP As CWKeyStateDown As CWKeyStateLeft As CWKeyStateRight As CWKeyStateTab As CWKeyStateShift As CWKeyStateCtrl As CWKeyStateAlt As CWKeyStateSpace As CWKeyStateBackSpace As CWKeyStateEnter As CWKeyStateNum1 As CWKeyStateNum2 As CWKeyStateNum3 As CWKeyStateNum4 As CWKeyStateNum5 As CWKeyStateNum6 As CWKeyStateNum7 As CWKeyStateNum8 As CWKeyStateNum9 As CWKeyStateNum0 As CWKeyStateA As CWKeyStateB As CWKeyStateC As CWKeyStateD As CWKeyStateE As CWKeyStateF As CWKeyStateG As CWKeyStateH As CWKeyStateI As CWKeyStatej As CWKeyStateK As CWKeyStateL As CWKeyStateM As CWKeyStateN As CWKeyStateO As CWKeyStateP As CWKeyStateQ As CWKeyStateR As CWKeyStateS As CWKeyStateT As CWKeyStateU As CWKeyStateV As CWKeyStateW As CWKeyStateX As CWKeyStateY As CWKeyStateZ As CWKeyState
End TypePublic Type CWJoystickState        '手柄类IsConnected As BooleanIsPov As BooleanX As SingleY As SingleZ As SingleR As SinglePov As SingleBtn(1 To 30) As CWKeyState
End TypeEnum CWSpriteStateEndedBeginedDrawed
End EnumEnum CWLinePatternCWLP_TransparentCWLP_Solid = &HFFFFFFFFCWLP_Dash = &H7E7E7E7ECWLP_Dot = &H66666666CWLP_DashDot = &H87E187E1CWLP_DashDotDot = &H67E667E6CWLP_Minus = &H3C3C3C3CCWLP_DashMinus = &HE3C7E3C7CWLP_MinusDot = &HBDBDBDBDCWLP_MinusDotDot = &HC663C663CWLP_Point = &HAAAAAAAACWLP_InvPoint = &H55555555CWLP_DotPointPoint = &HA5A5A5A5
End EnumPublic WorldTransform As CWMatrix '世界阵列变换Public MatrixIdentity As CWMatrix, CWSpState As CWSpriteStatePublic CWD3D9 As Direct3D9, CWD3DDevice9 As Direct3DDevice9, CWSprite As D3DXSprite, CWSpriteSP As D3DXSprite 'DX9定义
Public CWDpp9 As D3DPRESENT_PARAMETERS '画布
Public CWD3Dc9 As D3DCAPS9  '设备特性Public CWLine As D3DXLinePublic CWGameRun As Boolean '运行状态Public CWWindowSwitch As Boolean '全屏窗口切换Public CWLongTime As Long, CWFrameCount As Long, CWTimeNow As Long
Public CWFPS As IntegerPublic CWFrm As Object, CWHwnd As Long, CWDModelX As Integer, CWDModelY As Integer, CWDModelW As Integer '窗口定义
Public CWFrmHei As Long, CWFrmWid As Long, CWFrmSHei As Long, CWFrmSWid As Long, CWMTempC As Long '窗口定义Public CWFontList() As D3DXFont, CWFontNum As Long  '文字处理列表
Public CWMusicList() As CWMusicObj, CWMusicNum As Long '音乐处理列表Public IsActive As Boolean, IsHitWnd As Boolean
Public CWMouse As CWMouseState
Public CWKeyboard As CWKeyboardState
Public CWJoystick() As CWJoystickStatePublic CWP_PubRollCD As D3DVECTOR   '精灵贴图常用固定值Enum CWDisplayModel     '显示模式常量CW_Windowed = 1  '窗口化CW_FullScreen = 0 '全屏
End EnumEnum CWFAlign               '文字对齐常量CWF_LeftAl = DT_LEFT Or DT_WORDBREAKCWF_RightAl = DT_RIGHT Or DT_WORDBREAKCWF_CenterAl = DT_CENTER Or DT_WORDBREAK
End EnumEnum CWFBStyle              '字体粗细常量CWF_Normal = 400CWF_Bold = 700
End EnumEnum CWMPModel              '音乐播放模式常量CWM_ResumeCWM_OnceCWM_RepeatCWM_Restart
End EnumPublic Const CWP_FVFConst As Long = D3DFVF_XYZRHW Or D3DFVF_DIFFUSE
Public Const CWP_SpriteConst As Long = D3DXSPRITE_DONOTMODIFY_RENDERSTATE Or D3DXSPRITE_DONOTSAVESTATE  '精灵参数常量
Public Const Pi As Single = 3.14159265358979                  'π常量
Public Const CWKD As Boolean = True
Public Const CWKU As Boolean = False
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2
Public Const RightButtonUpDown = &H18'*********************常用颜色列表***************************
Enum CWColorConstantsCWColorNone = &H0          '完全无色CWTransparent = &HFFFFFF    '透明有色(方便位运算截取颜色部分)CWBlack = &HFF000000        '黑色CWWhite = &HFFFFFFFF        '白色CWGrey = &HFF808080         '灰色CWRed = &HFFFF0000          '红色CWGreen = &HFF00FF00        '绿色CWBlue = &HFF0000FF         '蓝色CWYellow = &HFFFFFF00       '黄色CWPurple = &HFFFF00FF       '紫色CWCyan = &HFF00FFFF         '青色CWOrange = &HFFFF8000       '橙色CWkelly = &HFF80FF00        '黄绿色CWFuchsia = &HFFFF0080      '紫红色CWViolet = &HFF8000FF       '蓝紫色CWTurquoise = &HFF00FF80    '青绿色CWCyanine = &HFF0080FF      '青蓝色CWHA_Black = &H80000000     '半透明黑色CWHA_White = &H80FFFFFF     '半透明白色CWHA_Grey = &H80808080      '半透明灰色CWHA_Red = &H80FF0000       '半透明红色CWHA_Green = &H8000FF00     '半透明绿色CWHA_Blue = &H800000FF      '半透明蓝色CWHA_Yellow = &H80FFFF00    '半透明黄色CWHA_Purple = &H80FF00FF    '半透明紫色CWHA_Cyan = &H8000FFFF      '半透明青色CWHA_Orange = &H80FF8000    '橙色CWHA_kelly = &H8080FF00     '黄绿色CWHA_Fuchsia = &H80FF0080   '紫红色CWHA_Violet = &H808000FF    '蓝紫色CWHA_Turquoise = &H8000FF80 '青绿色CWHA_Cyanine = &H800080FF   '青蓝色
End Enum
'其他颜色请参考RGB颜色列表用CWColorARGB函数自行转换
'*********************常用颜色列表***************************Public Sub CWVBDX9Initialization(ByVal Frm As Object, ByVal ScrWidth As Integer, ByVal ScrHeight As Integer, ByVal IniState As CWDisplayModel, Optional ByVal Zoom As Single = 1!)Dim I As Integer, Anti As Integer, JSorH As LongIf App.PrevInstance = True ThenMsgBox "游戏已经在运行", vbInformation, "重复运行"EndExit SubEnd IftimeBeginPeriod 1On Error GoTo CWFIniEDHFrm.ScaleMode = 3     '窗口显示区大小按像素计算
Frm.BorderStyle = 0
Frm.Caption = Frm.Caption
Frm.Width = ScrWidth * Zoom * 15 '保证窗口显示区符合即将初始化的引擎分辨率,防止图形失真
Frm.Height = ScrHeight * Zoom * 15If IniState = CW_Windowed ThenFrm.BorderStyle = 1Frm.Caption = Frm.Caption
End IfSet CWFrm = Frm
CWHwnd = Frm.hWnd
CWDModelX = ScrWidth
CWDModelY = ScrHeight
CWDModelW = IniState
Frm.Show
CWFrmHei = Frm.Height
CWFrmSHei = Frm.ScaleHeight
CWFrmWid = Frm.Width
CWFrmSWid = Frm.ScaleWidth
CWMTempC = (CWDModelX * 15 - CWFrmWid) / 2With MatrixIdentity.m11 = 1!: .m22 = 1! ': .m33 = 1!: .m44 = 1!
End With
WorldTransform = MatrixIdentityOn Error GoTo CWIniEHDSet CWD3D9 = Direct3DCreate9(D3D_SDK_VERSION) '①设置DX9对象With CWDpp9 '②设置DX9设备对象,定义对象的D3DPRESENT_PARAMETERS属性(相当于弄好一块墙布).BackBufferWidth = ScrWidth.BackBufferHeight = ScrHeight.Windowed = IniState.SwapEffect = D3DSWAPEFFECT_DISCARD.BackBufferCount = 1.BackBufferFormat = D3DFMT_X8R8G8B8.hDeviceWindow = CWHwnd.PresentationInterval = D3DPRESENT_INTERVAL_ONE        '开启垂直同步End With
'    On Error Resume Next
'    Anti = 0
'    For i = 16 To 2 Step -2         '检测抗锯齿倍数
'    Err.Clear
'     CWD3D9.CheckDeviceMultiSampleType 0, D3DDEVTYPE_HAL, D3DFMT_A8R8G8B8, 1, i
'     CWD3D9.CheckDeviceMultiSampleType 0, D3DDEVTYPE_HAL, D3DFMT_A8R8G8B8, 0, i
'        If Err.Number = 0 Then
'        Anti = i
'        Exit For
'        End If
'    Next
'    If Anti > 0 Then CWDpp9.MultiSampleType = Anti           '抗锯齿On Error GoTo CWIniEHDCWD3D9.GetDeviceCaps 0, D3DDEVTYPE_HAL, CWD3Dc9JSorH = 0If CWD3Dc9.DevCaps And D3DDEVCAPS_HWTRANSFORMANDLIGHT Then        '检测是否支持硬件顶点渲染If (CWD3Dc9.VertexShaderVersion And &HFFFF&) >= &H200& ThenJSorH = D3DCREATE_HARDWARE_VERTEXPROCESSINGEnd IfEnd IfIf JSorH = 0 ThenJSorH = D3DCREATE_SOFTWARE_VERTEXPROCESSINGCWD3Dc9.VertexShaderVersion = 0End IfSet CWD3DDevice9 = CWD3D9.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, CWHwnd, JSorH, CWDpp9)CWD3DDevice9.SetRenderState D3DRS_CULLMODE, D3DCULL_NONE' Alpha 混合的效果比 Alpha 测试好,但 Alpha 测试是直接剔除不透明像素,不需要做混合运算,可以提高性能。' Alpha 混合(实现透明度功能,可以全透明、不透明、半透明)CWD3DDevice9.SetRenderState D3DRS_ALPHABLENDENABLE, TrueCWD3DDevice9.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHACWD3DDevice9.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA' Alpha 测试(只能实现全透明和不透明,不能半透明,但是效率比 Alpha 混合高)CWD3DDevice9.SetRenderState D3DRS_ALPHATESTENABLE, TrueCWD3DDevice9.SetRenderState D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUALCWD3DDevice9.SetRenderState D3DRS_ALPHAREF, 1CWD3DDevice9.SetSamplerState 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEARCWD3DDevice9.SetSamplerState 0, D3DSAMP_MINFILTER, D3DTEXF_LINEARCWD3DDevice9.SetSamplerState 0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDERCWD3DDevice9.SetSamplerState 0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDERCWD3DDevice9.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_MODULATECWD3DDevice9.SetRenderState D3DRS_LIGHTING, False  '描绘时不必使用光线CWD3DDevice9.SetRenderState D3DRS_ZWRITEENABLE, False   '描绘时不必使用Z-BufferD3DXCreateSprite CWD3DDevice9, CWSpriteD3DXCreateSprite CWD3DDevice9, CWSpriteSPD3DXCreateLine CWD3DDevice9, CWLineCWP_PubRollCD.X = 0CWP_PubRollCD.Y = 0CWP_PubRollCD.Z = 0CWFPS = 60CWFrameCount = 60CWLongTime = 0ReDim CWFontList(0)CWFontNum = 0CWMusicNum = 0CWWindowSwitch = FalseCWGameRun = True   '游戏状态设置为运行ReDim CWJoystick(0 To joyGetNumDevs() - 1)
Exit Sub
CWIniEHD:MsgBox "引擎初始化失败,请确认您完整安装了Directx 9.0c最新版。如仍然出现该问题请确认您的显卡是否兼容DirectX 9.0c。", vbInformation, "初始化错误"End
Exit SubCWFIniEDH:MsgBox "窗体初始化失败,作为CoolWind引擎初始化的窗体必须是具有句柄和客户区的对象。", vbInformation, "初始化错误"EndEnd Sub'准备好绘制场景
Public Sub CWBeginScene(Optional ByVal BackColor As CWColorConstants)If CWGameRun = True ThenIsActive = GetActiveWindow() = CWHwndCWMouseCheck '鼠标检测If IsActive ThenCWKeyboardCheck '键盘检测CWJoystickCheck '摇杆检测End IfEnd IfCWD3DDevice9.Clear 0, ByVal 0, D3DCLEAR_TARGET, BackColor, 0!, 0 '清除深度缓冲区CWD3DDevice9.BeginSceneEnd Sub
'呈现绘制的场景
Public Sub CWPresentScene()CWD3DDevice9.EndScene '场景结束DoEvents    '让系统能够处理其他信息(如获取键盘、鼠标状态等)CWMediaLoopRepairCWD3DDevice9.Present ByVal 0, ByVal 0, 0, ByVal 0   '刷新CWGetFPS    '获取FPSIf CWFPS > 86 Then Sleep 10  '窗口被完全遮挡时降低CPU占用If CWWindowSwitch = True ThenCWWindowSwEnd If
End SubPublic Sub SaveScreenShot(file_name As String, Optional ByVal Format As D3DXIMAGE_FILEFORMAT = D3DXIFF_PNG) '截屏Dim BackBuffer As Direct3DSurface9Set BackBuffer = CWD3DDevice9.GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO)D3DXSaveSurfaceToFileW file_name, Format, BackBuffer, ByVal 0&, ByVal 0&Set BackBuffer = Nothing'''    enum D3DXIMAGE_FILEFORMAT
'''    D3DXIFF_BMP = 0
'''    D3DXIFF_JPG = 1
'''    D3DXIFF_TGA = 2
'''    D3DXIFF_PNG = 3
'''    D3DXIFF_DDS = 4
'''    D3DXIFF_PPM = 5
'''    D3DXIFF_DIB = 6
'''    D3DXIFF_HDR = 7
'''    D3DXIFF_PFM = 8
'''     end enum
End SubPublic Sub CWResetDevice()      '重置设备
Dim I As Long
On Error GoTo CWResetEHDIf CWD3DDevice9.TestCooperativeLevel = D3DERR_DEVICENOTRESET Then  '检测到设备丢失CWSprite.OnLostDeviceCWSpriteSP.OnLostDeviceCWLine.OnLostDeviceIf CWFontNum > 0 ThenFor I = 1 To CWFontNumCWFontList(I).OnLostDeviceNextEnd IfCWD3DDevice9.Reset CWDpp9CWD3DDevice9.SetRenderState D3DRS_CULLMODE, D3DCULL_NONECWD3DDevice9.SetRenderState D3DRS_ALPHABLENDENABLE, TrueCWD3DDevice9.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA         '描绘时开启透明色CWD3DDevice9.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHACWD3DDevice9.SetRenderState D3DRS_ALPHATESTENABLE, TrueCWD3DDevice9.SetRenderState D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUALCWD3DDevice9.SetRenderState D3DRS_ALPHAREF, 1CWD3DDevice9.SetSamplerState 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEARCWD3DDevice9.SetSamplerState 0, D3DSAMP_MINFILTER, D3DTEXF_LINEARCWD3DDevice9.SetSamplerState 0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDERCWD3DDevice9.SetSamplerState 0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDERCWD3DDevice9.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_MODULATECWD3DDevice9.SetRenderState D3DRS_LIGHTING, False  '描绘时不必使用光线CWD3DDevice9.SetRenderState D3DRS_ZWRITEENABLE, False   '描绘时不必使用Z-BufferCWSprite.OnResetDevice           '由于纹理、字体已经设置为系统托管,暂时用不上CWSpriteSP.OnResetDeviceCWLine.OnResetDeviceFor I = 1 To CWFontNumCWFontList(I).OnResetDeviceNext
End IfSleep 1DoEventsExit Sub
CWResetEHD:
MsgBox "修复设备失败", vbInformation, "设备丢失"
End SubPublic Sub CWWindowSw()
Dim I As LongOn Error GoTo CWResetEHDSelect Case CWDpp9.WindowedCase CW_WindowedCWDpp9.Windowed = CW_FullScreenCWDModelW = CW_FullScreenCWFrm.BorderStyle = 0CWFrm.Caption = CWFrm.CaptionCase CW_FullScreenCWDpp9.Windowed = CW_WindowedCWDModelW = CW_WindowedCWFrm.BorderStyle = 1CWFrm.Caption = CWFrm.CaptionEnd SelectCWSprite.OnLostDeviceCWSpriteSP.OnLostDeviceCWLine.OnLostDeviceIf CWFontNum > 0 ThenFor I = 1 To CWFontNumCWFontList(I).OnLostDeviceNextEnd IfCWD3DDevice9.Reset CWDpp9CWD3DDevice9.SetRenderState D3DRS_CULLMODE, D3DCULL_NONECWD3DDevice9.SetRenderState D3DRS_ALPHABLENDENABLE, TrueCWD3DDevice9.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA         '描绘时开启透明色CWD3DDevice9.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHACWD3DDevice9.SetRenderState D3DRS_ALPHATESTENABLE, TrueCWD3DDevice9.SetRenderState D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUALCWD3DDevice9.SetRenderState D3DRS_ALPHAREF, 1CWD3DDevice9.SetSamplerState 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEARCWD3DDevice9.SetSamplerState 0, D3DSAMP_MINFILTER, D3DTEXF_LINEARCWD3DDevice9.SetSamplerState 0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDERCWD3DDevice9.SetSamplerState 0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDERCWD3DDevice9.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_MODULATECWD3DDevice9.SetRenderState D3DRS_LIGHTING, False  '描绘时不必使用光线CWD3DDevice9.SetRenderState D3DRS_ZWRITEENABLE, False   '描绘时不必使用Z-BufferCWSprite.OnResetDevice           '由于纹理、字体已经设置为系统托管,暂时用不上CWSpriteSP.OnResetDeviceCWLine.OnResetDeviceFor I = 1 To CWFontNumCWFontList(I).OnResetDeviceNextIf CWDModelW = CW_Windowed ThenCWFrm.Left = CWFrm.Left + 300CWFrm.Top = CWFrm.Top + 300CWFrm.Height = CWFrmHeiCWFrm.Width = CWFrmWidEnd IfCWWindowSwitch = False
Exit Sub
CWResetEHD:
MsgBox "全屏/窗口模式切换失败", vbInformation, "设备丢失"
CWWindowSwitch = False
End SubPublic Sub CWWinFullScrSwitch()
CWWindowSwitch = True
End SubPublic Sub CWVBDX9Destory() '销毁CoolWind引擎Dim I As Long'mciSendStringW StrPtr("close all")Set CWSprite = NothingSet CWSpriteSP = NothingIf CWFontNum > 0 ThenFor I = 1 To CWFontNumSet CWFontList(I) = NothingNextEnd IfSet CWD3DDevice9 = NothingSet CWD3D9 = NothingtimeEndPeriod 1
End SubPublic Sub CWLoadPic(Pic As CWPic, ByVal PicPath As String, Optional ByVal SColor As CWColorConstants)Dim DXInfo As D3DXIMAGE_INFOOn Error GoTo CWLPEHDD3DXCreateTextureFromFileExW CWD3DDevice9, PicPath, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, SColor, DXInfo, ByVal 0, Pic.TexPic.PICSize.X1 = 0Pic.PICSize.Y1 = 0Pic.PICSize.X2 = DXInfo.WidthPic.PICSize.Y2 = DXInfo.HeightIf Pic.PICSize.X2 <> 0 And Pic.PICSize.Y2 <> 0 ThenExit SubEnd IfCWLPEHD:MsgBox "找不到图片或不支持的图片格式", vbInformation, "纹理初始化失败"End
End SubPublic Sub CWMapPic(Pic As CWPic, PicSrc As CWPic, ByVal SrcX As Long, ByVal SrcY As Long, ByVal SrcW As Long, ByVal SrcH As Long)Pic.PICSize.X1 = PicSrc.PICSize.X1 + SrcXPic.PICSize.Y1 = PicSrc.PICSize.Y1 + SrcYPic.PICSize.X2 = Pic.PICSize.X1 + SrcWPic.PICSize.Y2 = Pic.PICSize.Y1 + SrcHSet Pic.Tex = PicSrc.Tex
End SubPublic Sub CWLoadPicFromGDIP(Pic As CWPic, ByVal GpBmp As Long)Dim GpBmpDat As GpBitmapData, lrc As D3DLOCKED_RECTOn Error GoTo CWLPEHDWith GpBmpDatIf GdipGetImageWidth(GpBmp, .Width) Then GoTo CWLPEHDIf GdipGetImageHeight(GpBmp, .Height) Then GoTo CWLPEHDD3DXCreateTexture CWD3DDevice9, .Width, .Height, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, Pic.TexPic.Tex.LockRect 0, lrc, ByVal 0&, D3DLOCK_DISCARD Or D3DLOCK_DONOTWAIT Or D3DLOCK_NO_DIRTY_UPDATE Or D3DLOCK_NOSYSLOCK.Stride = lrc.Pitch.Scan0 = lrc.pBits.PixelFormat = GpPixelFormat32bppARGBIf GdipBitmapLockBits(GpBmp, ByVal 0&, GpImageLockModeRead Or GpImageLockModeUserInputBuf, .PixelFormat, GpBmpDat) Then GoTo CWLPEHDGdipBitmapUnlockBits GpBmp, GpBmpDatPic.Tex.UnlockRect 0Pic.PICSize.X1 = 0Pic.PICSize.Y1 = 0Pic.PICSize.X2 = .WidthPic.PICSize.Y2 = .HeightEnd WithIf Pic.PICSize.X2 <> 0 And Pic.PICSize.Y2 <> 0 ThenExit SubEnd IfCWLPEHD:MsgBox "非GDI+位图或不支持的像素格式", vbInformation, "纹理初始化失败"End
End SubPublic Property Get CWPicGetPixel(Pic As CWPic, ByVal X As Long, ByVal Y As Long) As CWColorConstantsX = X + Pic.PICSize.X1Y = Y + Pic.PICSize.Y1If 0 = PtInRect(Pic.PICSize, X, Y) Then Exit PropertyDim rc As D3DRECT, lrc As D3DLOCKED_RECTrc.X1 = X: rc.Y1 = Yrc.X2 = X: rc.Y2 = YPic.Tex.LockRect 0, lrc, rc, D3DLOCK_READONLY Or D3DLOCK_DONOTWAIT Or D3DLOCK_NO_DIRTY_UPDATE Or D3DLOCK_NOSYSLOCKGetMem4 lrc.pBits, CWPicGetPixelPic.Tex.UnlockRect 0
End PropertyPublic Property Let CWPicSetPixel(Pic As CWPic, ByVal X As Long, ByVal Y As Long, ByVal Value As CWColorConstants)X = X + Pic.PICSize.X1Y = Y + Pic.PICSize.Y1If 0 = PtInRect(Pic.PICSize, X, Y) Then Exit PropertyDim rc As D3DRECT, lrc As D3DLOCKED_RECTrc.X1 = X: rc.Y1 = Yrc.X2 = X: rc.Y2 = YPic.Tex.LockRect 0, lrc, rc, D3DLOCK_DISCARD Or D3DLOCK_DONOTWAIT Or D3DLOCK_NO_DIRTY_UPDATE Or D3DLOCK_NOSYSLOCKPutMem4 lrc.pBits, ValuePic.Tex.UnlockRect 0
End Property' 绘制图片(不缩放、不裁剪、不旋转)
Public Sub CWPaintPic(Pic As CWPic, ByVal PaintX As Single, ByVal PaintY As Single, Optional ByVal HColor As CWColorConstants = CWWhite)If Pic.Tex Is Nothing Then Exit SubDim TexMatrix As D3DMATRIXWith TexMatrix.m11 = WorldTransform.m11.m12 = WorldTransform.m12.m21 = WorldTransform.m21.m22 = WorldTransform.m22.m33 = 1!.m44 = 1!TransformationEx .m41, .m42, PaintX, PaintY, WorldTransformEnd WithCWSprite.SetTransform TexMatrixCWSprite.Draw Pic.Tex, Pic.PICSize, CWP_PubRollCD, CWP_PubRollCD, HColorCWSpState = Drawed
End Sub' 绘制图片(缩放、不裁剪、不旋转)
Public Sub CWPaintPic2(Pic As CWPic, ByVal PaintX As Single, ByVal PaintY As Single, ByVal PaintWidth As Single, ByVal PaintHeight As Single, Optional ByVal HColor As CWColorConstants = CWWhite)If Pic.Tex Is Nothing Then Exit SubDim TexMatrix As D3DMATRIXWith TexMatrix.m11 = PaintWidth / (Pic.PICSize.X2 - Pic.PICSize.X1).m22 = PaintHeight / (Pic.PICSize.Y2 - Pic.PICSize.Y1).m33 = 1!.m44 = 1!.m12 = .m11 * WorldTransform.m12.m21 = .m22 * WorldTransform.m21.m11 = .m11 * WorldTransform.m11.m22 = .m22 * WorldTransform.m22TransformationEx .m41, .m42, PaintX, PaintY, WorldTransformEnd WithCWSprite.SetTransform TexMatrixCWSprite.Draw Pic.Tex, Pic.PICSize, CWP_PubRollCD, CWP_PubRollCD, HColorCWSpState = Drawed
End Sub' 绘制图片(不缩放、裁剪、不旋转)
Public Sub CWPaintPicEx(Pic As CWPic, ByVal PaintX As Single, ByVal PaintY As Single, ByVal CutX As Integer, ByVal CutY As Integer, ByVal CutWidth As Integer, ByVal CutHeight As Integer, Optional ByVal HColor As CWColorConstants = CWWhite)If Pic.Tex Is Nothing Then Exit SubDim TexMatrix As D3DMATRIX, TexCut As D3DRECTWith TexMatrix.m11 = WorldTransform.m11.m12 = WorldTransform.m12.m21 = WorldTransform.m21.m22 = WorldTransform.m22.m33 = 1!.m44 = 1!TransformationEx .m41, .m42, PaintX, PaintY, WorldTransformEnd WithWith TexCut.X1 = Pic.PICSize.X1 + CutX.Y1 = Pic.PICSize.Y1 + CutY.X2 = .X1 + CutWidth.Y2 = .Y1 + CutHeightEnd WithCWSprite.SetTransform TexMatrixCWSprite.Draw Pic.Tex, TexCut, CWP_PubRollCD, CWP_PubRollCD, HColorCWSpState = Drawed
End Sub' 绘制图片(缩放、裁剪、不旋转)
Public Sub CWPaintPicEx2(Pic As CWPic, ByVal PaintX As Single, ByVal PaintY As Single, ByVal PaintWidth As Single, ByVal PaintHeight As Single, ByVal CutX As Integer, ByVal CutY As Integer, ByVal CutWidth As Integer, ByVal CutHeight As Integer, Optional ByVal HColor As CWColorConstants = CWWhite)If Pic.Tex Is Nothing Then Exit SubDim TexMatrix As D3DMATRIX, TexCut As D3DRECTWith TexMatrix.m11 = PaintWidth / CutWidth.m22 = PaintHeight / CutHeight.m33 = 1!.m44 = 1!.m12 = .m11 * WorldTransform.m12.m21 = .m22 * WorldTransform.m21.m11 = .m11 * WorldTransform.m11.m22 = .m22 * WorldTransform.m22TransformationEx .m41, .m42, PaintX, PaintY, WorldTransformEnd WithWith TexCut.X1 = Pic.PICSize.X1 + CutX.Y1 = Pic.PICSize.Y1 + CutY.X2 = .X1 + CutWidth.Y2 = .Y1 + CutHeightEnd WithCWSprite.SetTransform TexMatrixCWSprite.Draw Pic.Tex, TexCut, CWP_PubRollCD, CWP_PubRollCD, HColorCWSpState = Drawed
End Sub' 绘制图片(缩放、裁剪、旋转)
Public Sub CWPaintPicExEx(Pic As CWPic, ByVal PaintX As Single, ByVal PaintY As Single, ByVal CutX As Integer, ByVal CutY As Integer, ByVal CutWidth As Integer, ByVal CutHeight As Integer _
, Optional ByVal ZoomX As Single = 1, Optional ByVal ZoomY As Single = 1, Optional ByVal RollX As Single, Optional ByVal RollY As Single, Optional ByVal RollAngle As Single, Optional ByVal HColor As CWColorConstants = CWWhite)PaintX = RollX - PaintXPaintY = RollY - PaintYCall CWPaintPicFull(Pic, RollX, RollY, CutX, CutY, CutWidth, CutHeight, ZoomX, ZoomY, PaintX, PaintY, , PaintX, PaintY, RollAngle, HColor)
End Sub' 绘制图片(先旋转后缩放,可裁剪)
Public Sub CWPaintPicExEx1(Pic As CWPic, ByVal PaintX As Single, ByVal PaintY As Single, ByVal CutX As Integer, ByVal CutY As Integer, ByVal CutWidth As Integer, ByVal CutHeight As Integer _
, Optional ByVal ZoomX As Single = 1, Optional ByVal ZoomY As Single = 1, Optional ByVal CenterX As Single, Optional ByVal CenterY As Single, Optional ByVal RollAngle As Single, Optional ByVal HColor As CWColorConstants = CWWhite)Call CWPaintPicFull(Pic, PaintX, PaintY, CutX, CutY, CutWidth, CutHeight, ZoomX, ZoomY, CenterX, CenterY, -RollAngle, CenterX, CenterY, RollAngle, HColor)
End Sub' 绘制图片(先缩放后旋转,可裁剪)
Public Sub CWPaintPicExEx2(Pic As CWPic, ByVal PaintX As Single, ByVal PaintY As Single, ByVal CutX As Integer, ByVal CutY As Integer, ByVal CutWidth As Integer, ByVal CutHeight As Integer _
, Optional ByVal ZoomX As Single = 1, Optional ByVal ZoomY As Single = 1, Optional ByVal CenterX As Single, Optional ByVal CenterY As Single, Optional ByVal RollAngle As Single, Optional ByVal HColor As CWColorConstants = CWWhite)Call CWPaintPicFull(Pic, PaintX, PaintY, CutX, CutY, CutWidth, CutHeight, ZoomX, ZoomY, CenterX, CenterY, , CenterX, CenterY, RollAngle, HColor)
End Sub' 绘制图片(完整版:缩放和旋转独立,不存在先后关系,可裁剪)
Public Sub CWPaintPicFull(Pic As CWPic, ByVal PaintX As Single, ByVal PaintY As Single, ByVal CutX As Integer, ByVal CutY As Integer, ByVal CutWidth As Integer, ByVal CutHeight As Integer _
, Optional ByVal ZoomX As Single = 1, Optional ByVal ZoomY As Single = 1, Optional ByVal ZoomCX As Single, Optional ByVal ZoomCY As Single, Optional ByVal ZoomAngle As Single _
, Optional ByVal RollX As Single, Optional ByVal RollY As Single, Optional ByVal RollAngle As Single, Optional ByVal HColor As CWColorConstants = CWWhite)If Pic.Tex Is Nothing Then Exit SubDim TexMatrix As D3DMATRIX, TexCut As D3DRECTDim TexCoordinate As D3DXVECTOR2, ScaleCoordinate As D3DXVECTOR2, ScaleCenterCoordinate As D3DXVECTOR2, RollCoordinate As D3DXVECTOR2With TexCut.X1 = Pic.PICSize.X1 + CutX.Y1 = Pic.PICSize.Y1 + CutY.X2 = .X1 + CutWidth.Y2 = .Y1 + CutHeightEnd WithWith TexCoordinate.X = PaintX - RollX.Y = PaintY - RollYEnd WithWith ScaleCoordinate.X = ZoomX.Y = ZoomYEnd WithWith ScaleCenterCoordinate.X = ZoomCX.Y = ZoomCYEnd WithWith RollCoordinate '设置图片的转动轴坐标.X = RollX.Y = RollYEnd WithD3DXMatrixTransformation2D TexMatrix, ScaleCenterCoordinate, ZoomAngle, ScaleCoordinate, RollCoordinate, RollAngle, TexCoordinateWith TexMatrixZoomX = .m11: RollX = .m12RollY = .m21: ZoomY = .m22PaintX = .m41: PaintY = .m42.m11 = ZoomX * WorldTransform.m11 + RollX * WorldTransform.m21.m12 = ZoomX * WorldTransform.m12 + RollX * WorldTransform.m22.m21 = RollY * WorldTransform.m11 + ZoomY * WorldTransform.m21.m22 = RollY * WorldTransform.m12 + ZoomY * WorldTransform.m22TransformationEx .m41, .m42, PaintX, PaintY, WorldTransformEnd WithCWSprite.SetTransform TexMatrixCWSprite.Draw Pic.Tex, TexCut, CWP_PubRollCD, CWP_PubRollCD, HColorCWSpState = Drawed
End Sub
'画点(横坐标,纵坐标,颜色)
Public Sub CWDrawPoint(ByVal OX As Single, ByVal OY As Single, ByVal CColor As CWColorConstants) '画点Dim Vector2D As D2DVectorWith Vector2DTransformationEx .X, .Y, OX, OY, WorldTransform '改变阵列.Rhw = 1!.Color = CColorEnd WithCWPaintPicFlush ' 要先提交精灵的绘制,再画图形(否则层级会有问题)CWD3DDevice9.SetTexture 0, NothingCWD3DDevice9.SetFVF CWP_FVFConstCWD3DDevice9.DrawPrimitiveUP D3DPT_POINTLIST, 1, Vector2D, LenB(Vector2D)
End Sub
'画线(起点横坐标,起点纵坐标,终点横坐标,终点纵坐标,颜色)
Public Sub CWDrawLine(ByVal OX As Single, ByVal OY As Single, ByVal DX As Single, ByVal DY As Single, ByVal CColor As CWColorConstants) '划线Call CWDrawLineEx(OX, OY, DX, DY, 1!, 1!, CColor, CColor)
End Sub
' '画渐变色线(起点横坐标,起点纵坐标,终点横坐标,终点纵坐标,起点颜色权重,重点颜色权重,起点颜色,终点颜色)
Public Sub CWDrawLineEx(ByVal OX As Single, ByVal OY As Single, ByVal DX As Single, ByVal DY As Single, ByVal ORHW As Single, ByVal DRHW As Single, ByVal OColor As CWColorConstants, ByVal DColor As CWColorConstants)Dim X!, Y!, S!, Vector2D(0 To 1) As D2DVectorTransformation OX, OY, WorldTransformTransformation DX, DY, WorldTransformX = (OX - DX): Y = (OY - DY)S = Abs2(X, Y)X = 0.5! * X / S: Y = 0.5! * Y / SWith Vector2D(0).X = OX + X.Y = OY + Y.Rhw = ORHW.Color = OColorEnd WithWith Vector2D(1).X = DX - X.Y = DY - Y.Rhw = DRHW.Color = DColorEnd WithCWPaintPicFlush ' 要先提交精灵的绘制,再画图形(否则层级会有问题)CWD3DDevice9.SetTexture 0, NothingCWD3DDevice9.SetFVF CWP_FVFConstCWD3DDevice9.DrawPrimitiveUP D3DPT_LINELIST, 1, Vector2D(0), LenB(Vector2D(0))
End SubPublic Sub CWDrawLine2(ByVal OX As Single, ByVal OY As Single, ByVal DX As Single, ByVal DY As Single, ByVal CColor As CWColorConstants, Optional ByVal Antialias As Boolean, Optional ByVal Pattern As CWLinePattern = CWLP_Solid, Optional ByVal Width As Single = 1!, Optional ByVal PatternScale As Single = 1!)Dim Vector2D(0 To 1) As D3DXVECTOR2With Vector2D(0)TransformationEx .X, .Y, OX, OY, WorldTransform.X = .X - 0.5!: .Y = .Y - 0.5!End WithWith Vector2D(1)TransformationEx .X, .Y, DX, DY, WorldTransform.X = .X - 0.5!: .Y = .Y - 0.5!End WithCWPaintPicFlush ' 要先提交精灵的绘制,再画图形(否则层级会有问题)With CWLine.SetAntialias Antialias.SetPattern Pattern.SetWidth Width.SetPatternScale PatternScale.Begin.Draw Vector2D(0), 2, CColor.EndEnd With
End SubPublic Sub CWDrawLine2Ex(PointList() As D3DXVECTOR2, ByVal CColor As CWColorConstants, Optional ByVal Antialias As Boolean, Optional ByVal Pattern As CWLinePattern = CWLP_Solid, Optional ByVal Width As Single = 1!, Optional ByVal PatternScale As Single = 1!)Dim I&, Vector2D() As D3DXVECTOR2Vector2D = PointListFor I = LBound(Vector2D) To UBound(Vector2D)With Vector2D(I)Transformation .X, .Y, WorldTransform.X = .X - 0.5!: .Y = .Y - 0.5!End WithNextCWPaintPicFlush ' 要先提交精灵的绘制,再画图形(否则层级会有问题)With CWLine.SetAntialias Antialias.SetPattern Pattern.SetWidth Width.SetPatternScale PatternScale.Begin.Draw Vector2D(LBound(Vector2D)), UBound(Vector2D) - LBound(Vector2D) + 1, CColor.EndEnd With
End SubPublic Sub CWDrawHTriangle(ByVal X1 As Single, ByVal Y1 As Single, ByVal X2 As Single, ByVal Y2 As Single, ByVal X3 As Single, ByVal Y3 As Single, ByVal Color As CWColorConstants)Dim Vector2D(0 To 2) As D2DVectorWith Vector2D(0)TransformationEx .X, .Y, X1, Y1, WorldTransform.X = .X - 0.5!.Y = .Y - 0.5!.Rhw = 1!.Color = ColorEnd WithWith Vector2D(1)TransformationEx .X, .Y, X2, Y2, WorldTransform.X = .X - 0.5!.Y = .Y - 0.5!.Rhw = 1!.Color = ColorEnd WithWith Vector2D(2)TransformationEx .X, .Y, X3, Y3, WorldTransform.X = .X - 0.5!.Y = .Y - 0.5!.Rhw = 1!.Color = ColorEnd WithVector2D(3) = Vector2D(0)CWPaintPicFlush ' 要先提交精灵的绘制,再画图形(否则层级会有问题)CWD3DDevice9.SetTexture 0, NothingCWD3DDevice9.SetFVF CWP_FVFConstCWD3DDevice9.DrawPrimitiveUP D3DPT_LINESTRIP, 3, Vector2D(0), LenB(Vector2D(0))
End SubPublic Sub CWDrawSTriangle(ByVal X1 As Single, ByVal Y1 As Single, ByVal X2 As Single, ByVal Y2 As Single, ByVal X3 As Single, ByVal Y3 As Single, ByVal Color As CWColorConstants)Call CWDrawSTriangleEx(X1, Y1, X2, Y2, X3, Y3, 1!, 1!, 1!, Color, Color, Color)
End SubPublic Sub CWDrawSTriangleEx(ByVal X1 As Single, ByVal Y1 As Single, ByVal X2 As Single, ByVal Y2 As Single, ByVal X3 As Single, ByVal Y3 As Single, ByVal RHW1 As Single, ByVal RHW2 As Single, ByVal RHW3 As Single, ByVal Color1 As CWColorConstants, ByVal Color2 As CWColorConstants, ByVal Color3 As CWColorConstants)Dim Vector2D(0 To 2) As D2DVectorWith Vector2D(0)TransformationEx .X, .Y, X1, Y1, WorldTransform.X = .X - 0.5!.Y = .Y - 0.5!.Rhw = RHW1.Color = Color1End WithWith Vector2D(1)TransformationEx .X, .Y, X2, Y2, WorldTransform.X = .X - 0.5!.Y = .Y - 0.5!.Rhw = RHW2.Color = Color2End WithWith Vector2D(2)TransformationEx .X, .Y, X3, Y3, WorldTransform.X = .X - 0.5!.Y = .Y - 0.5!.Rhw = RHW3.Color = Color3End WithCWPaintPicFlush ' 要先提交精灵的绘制,再画图形(否则层级会有问题)CWD3DDevice9.SetTexture 0, NothingCWD3DDevice9.SetFVF CWP_FVFConstCWD3DDevice9.DrawPrimitiveUP D3DPT_TRIANGLEFAN, 1, Vector2D(0), LenB(Vector2D(0))
End Sub
''画空心矩形(起点横坐标,起点纵坐标,宽度,高度,颜色)
Public Sub CWDrawHRect(ByVal SX As Single, ByVal SY As Single, ByVal SWidth As Single, ByVal SHeight As Single, ByVal CColor As CWColorConstants)Call CWDrawHPlg(SX, SY, SX + SWidth, SY, SX, SY + SHeight, CColor)
End Sub'画实心矩形(起点横坐标,起点纵坐标,宽度,高度,颜色)
Public Sub CWDrawSRect(ByVal SX As Single, ByVal SY As Single, ByVal SWidth As Single, ByVal SHeight As Single, ByVal CColor As CWColorConstants)Call CWDrawSPlgEx(SX, SY, SX + SWidth, SY, SX, SY + SHeight, 1, 1, 1, CColor, CColor, CColor)
End Sub'画横向渐变色实心矩形(起点横坐标,起点纵坐标,宽度,高度,左边颜色权重,右边颜色权重,左边颜色,右边颜色)
Public Sub CWDrawSRectXGC(ByVal SX As Single, ByVal SY As Single, ByVal SWidth As Single, ByVal SHeight As Single, ByVal LRHW As Single, ByVal RRHW As Single, ByVal LColor As CWColorConstants, ByVal RColor As CWColorConstants)Call CWDrawSPlgEx(SX, SY, SX + SWidth, SY, SX, SY + SHeight, LRHW, RRHW, LRHW, LColor, RColor, LColor)
End Sub'画纵向渐变色实心矩形(起点横坐标,起点纵坐标,宽度,高度,上边颜色权重,下边颜色权重,上边颜色,下边颜色)
Public Sub CWDrawSRectYGC(ByVal SX As Single, ByVal SY As Single, ByVal SWidth As Single, ByVal SHeight As Single, ByVal TRHW As Single, ByVal BRHW As Single, ByVal TColor As CWColorConstants, ByVal BColor As CWColorConstants)Call CWDrawSPlgEx(SX, SY, SX + SWidth, SY, SX, SY + SHeight, TRHW, TRHW, BRHW, TColor, TColor, BColor)
End SubPublic Sub CWDrawHPlg(ByVal X1 As Single, ByVal Y1 As Single, ByVal X2 As Single, ByVal Y2 As Single, ByVal X3 As Single, ByVal Y3 As Single, ByVal Color As CWColorConstants)Dim Vector2D(0 To 4) As D2DVectorWith Vector2D(1)TransformationEx .X, .Y, X1, Y1, WorldTransform.X = .X - 0.5!.Y = .Y - 0.5!.Rhw = 1!.Color = ColorEnd WithWith Vector2D(2)TransformationEx .X, .Y, X2, Y2, WorldTransform.X = .X - 0.5!.Y = .Y - 0.5!.Rhw = 1!.Color = ColorEnd WithWith Vector2D(0)TransformationEx .X, .Y, X3, Y3, WorldTransform.X = .X - 0.5!.Y = .Y - 0.5!.Rhw = 1!.Color = ColorEnd WithWith Vector2D(3).X = Vector2D(0).X + Vector2D(2).X - Vector2D(1).X.Y = Vector2D(0).Y + Vector2D(2).Y - Vector2D(1).Y.Rhw = 1!.Color = ColorEnd WithVector2D(4) = Vector2D(0)CWPaintPicFlush ' 要先提交精灵的绘制,再画图形(否则层级会有问题)CWD3DDevice9.SetTexture 0, NothingCWD3DDevice9.SetFVF CWP_FVFConstCWD3DDevice9.DrawPrimitiveUP D3DPT_LINESTRIP, 4, Vector2D(0), LenB(Vector2D(0))
End SubPublic Sub CWDrawSPlg(ByVal X1 As Single, ByVal Y1 As Single, ByVal X2 As Single, ByVal Y2 As Single, ByVal X3 As Single, ByVal Y3 As Single, ByVal Color As CWColorConstants)Call CWDrawSPlgEx(X1, Y1, X2, Y2, X3, Y3, 1!, 1!, 1!, Color, Color, Color)
End SubPublic Sub CWDrawSPlgEx(ByVal X1 As Single, ByVal Y1 As Single, ByVal X2 As Single, ByVal Y2 As Single, ByVal X3 As Single, ByVal Y3 As Single, ByVal RHW1 As Single, ByVal RHW2 As Single, ByVal RHW3 As Single, ByVal Color1 As CWColorConstants, ByVal Color2 As CWColorConstants, ByVal Color3 As CWColorConstants)Dim Vector2D(0 To 3) As D2DVectorWith Vector2D(1)TransformationEx .X, .Y, X1, Y1, WorldTransform.X = .X - 0.5!.Y = .Y - 0.5!.Rhw = RHW1.Color = Color1End WithWith Vector2D(2)TransformationEx .X, .Y, X2, Y2, WorldTransform.X = .X - 0.5!.Y = .Y - 0.5!.Rhw = RHW2.Color = Color2End WithWith Vector2D(0)TransformationEx .X, .Y, X3, Y3, WorldTransform.X = .X - 0.5!.Y = .Y - 0.5!.Rhw = RHW3.Color = Color3End WithWith Vector2D(3).X = Vector2D(0).X + Vector2D(2).X - Vector2D(1).X.Y = Vector2D(0).Y + Vector2D(2).Y - Vector2D(1).Y.Rhw = RHW2 + RHW3 - RHW1If Color1 = Color2 Then.Color = Color3ElseIf Color1 = Color3 Then.Color = Color2ElseDim T&, c1 As CWColor, c2 As CWColor, c3 As CWColor, c4 As CWColorc1 = CWSplitColor(Color1)c2 = CWSplitColor(Color2)c3 = CWSplitColor(Color3)T = CLng(c2.Alpha) + CLng(c3.Alpha) - CLng(c1.Alpha)If T > 255 Then c4.Alpha = 255 Else If T < 0 Then c4.Alpha = 0 Else c4.Alpha = TT = CLng(c2.Red) + CLng(c3.Red) - CLng(c1.Red)If T > 255 Then c4.Red = 255 Else If T < 0 Then c4.Red = 0 Else c4.Red = TT = CLng(c2.Green) + CLng(c3.Green) - CLng(c1.Green)If T > 255 Then c4.Green = 255 Else If T < 0 Then c4.Green = 0 Else c4.Green = TT = CLng(c2.Blue) + CLng(c3.Blue) - CLng(c1.Blue)If T > 255 Then c4.Blue = 255 Else If T < 0 Then c4.Blue = 0 Else c4.Blue = TGetMem4 VarPtr(c4), .ColorEnd IfEnd WithCWPaintPicFlush ' 要先提交精灵的绘制,再画图形(否则层级会有问题)CWD3DDevice9.SetTexture 0, NothingCWD3DDevice9.SetFVF CWP_FVFConstCWD3DDevice9.DrawPrimitiveUP D3DPT_TRIANGLEFAN, 2, Vector2D(0), LenB(Vector2D(0))
End Sub
'画横向中心渐变色实心矩形(起点横坐标,起点纵坐标,宽度,高度,中心颜色权重,两边颜色权重,中心颜色, 两边颜色)
Public Sub CWDrawSRectXCGC(ByVal SX As Single, ByVal SY As Single, ByVal SWidth As Single, ByVal SHeight As Single, ByVal ORHW As Single, ByVal CRHW As Single, ByVal OColor As CWColorConstants, ByVal CColor As CWColorConstants)Call CWDrawSRectCGCEx(SX, SY, SWidth, SHeight, ORHW, CRHW, ORHW, CRHW, OColor, CColor, OColor, CColor)
End SubPublic Sub CWDrawSRectYCGC(ByVal SX As Single, ByVal SY As Single, ByVal SWidth As Single, ByVal SHeight As Single, ByVal ORHW As Single, ByVal CRHW As Single, ByVal OColor As CWColorConstants, ByVal CColor As CWColorConstants)Call CWDrawSRectCGCEx(SX, SY, SWidth, SHeight, ORHW, CRHW, CRHW, ORHW, OColor, CColor, CColor, OColor)
End Sub'画中心渐变色实心矩形(起点横坐标,起点纵坐标,宽度,高度,中心颜色权重,周边颜色权重,中心颜色, 周边颜色)
Public Sub CWDrawSRectCGC(ByVal SX As Single, ByVal SY As Single, ByVal SWidth As Single, ByVal SHeight As Single, ByVal ORHW As Single, ByVal CRHW As Single, ByVal OColor As CWColorConstants, ByVal CColor As CWColorConstants)Dim HAW As Single, HAH As Single, HARHW As SingleHAW = 0.5! * SWidthHAH = 0.5! * SHeightHARHW = Abs(CRHW - ORHW) / Abs2(HAW, HAH)       '+ CRHWCall CWDrawSRectCGCEx(SX, SY, SWidth, SHeight, ORHW, CRHW, HAW * HARHW, HAH * HARHW, OColor, CColor, CColor, CColor)
End SubPublic Sub CWDrawSRectCGCEx(ByVal SX As Single, ByVal SY As Single, ByVal SWidth As Single, ByVal SHeight As Single, ByVal ORHW As Single, ByVal CRHW As Single, ByVal XRHW As Single, ByVal YRHW As Single, ByVal OColor As CWColorConstants, ByVal CColor As CWColorConstants, ByVal XColor As CWColorConstants, ByVal YColor As CWColorConstants)Dim I&, Vector2D(0 To 9) As D2DVector, HAW As Single, HAH As SingleHAW = 0.5 * SWidthHAH = 0.5 * SHeightVector2D(0).X = SX + HAWVector2D(0).Y = SY + HAHVector2D(0).Color = OColorVector2D(0).Rhw = ORHWVector2D(1).X = SXVector2D(1).Y = SYVector2D(1).Color = CColorVector2D(1).Rhw = CRHWVector2D(2).X = SX + HAWVector2D(2).Y = SYVector2D(2).Color = XColorVector2D(2).Rhw = XRHWVector2D(3).X = SX + SWidthVector2D(3).Y = SYVector2D(3).Color = CColorVector2D(3).Rhw = CRHWVector2D(4).X = SX + SWidthVector2D(4).Y = SY + HAHVector2D(4).Color = YColorVector2D(4).Rhw = YRHWVector2D(5).X = SX + SWidthVector2D(5).Y = SY + SHeightVector2D(5).Color = CColorVector2D(5).Rhw = CRHWVector2D(6).X = SX + HAWVector2D(6).Y = SY + SHeightVector2D(6).Color = XColorVector2D(6).Rhw = XRHWVector2D(7).X = SXVector2D(7).Y = SY + SHeightVector2D(7).Color = CColorVector2D(7).Rhw = CRHWVector2D(8).X = SXVector2D(8).Y = SY + HAHVector2D(8).Color = YColorVector2D(8).Rhw = YRHWFor I = 0 To 8With Vector2D(I)Transformation .X, .Y, WorldTransform.X = .X - 0.5!: .Y = .Y - 0.5!End WithNextVector2D(9) = Vector2D(1)CWPaintPicFlush ' 要先提交精灵的绘制,再画图形(否则层级会有问题)CWD3DDevice9.SetTexture 0, NothingCWD3DDevice9.SetFVF CWP_FVFConstCWD3DDevice9.DrawPrimitiveUP D3DPT_TRIANGLEFAN, 8, Vector2D(0), LenB(Vector2D(0))
End Sub'画实心圆(圆心横坐标,圆心纵坐标,半径,颜色)
Public Sub CWDrawSCircle(ByVal CX As Single, ByVal CY As Single, ByVal RR As Single, ByVal CColor As CWColorConstants)Call CWDrawSEllipseEx(CX, CY, RR, RR, 1, 1, CColor, CColor)
End Sub'画中心渐变色实心圆(圆心横坐标,圆心纵坐标,半径,中心颜色权重,周边颜色权重,中心颜色, 周边颜色)
Public Sub CWDrawSCircleEx(ByVal CX As Single, ByVal CY As Single, ByVal RR As Single, ByVal ORHW As Single, ByVal CRHW As Single, ByVal OColor As CWColorConstants, ByVal CColor As CWColorConstants)Call CWDrawSEllipseEx(CX, CY, RR, RR, ORHW, CRHW, OColor, CColor)
End Sub
'画空心圆(圆心横坐标,圆心纵坐标,半径,颜色)
Public Sub CWDrawHCircle(ByVal CX As Single, ByVal CY As Single, ByVal RR As Single, ByVal CColor As CWColorConstants)Call CWDrawHEllipse(CX, CY, RR, RR, CColor)
End SubPublic Sub CWDrawSEllipse(ByVal CX As Single, ByVal CY As Single, ByVal RX As Single, ByVal RY As Single, ByVal CColor As CWColorConstants, Optional ByVal RollAngle As Single)Call CWDrawSEllipseEx(CX, CY, RX, RY, 1, 1, CColor, CColor, RollAngle)
End SubPublic Sub CWDrawSEllipseEx(ByVal CX As Single, ByVal CY As Single, ByVal RX As Single, ByVal RY As Single, ByVal ORHW As Single, ByVal CRHW As Single, ByVal OColor As CWColorConstants, ByVal CColor As CWColorConstants, Optional ByVal RollAngle As Single)Dim Vector2D() As D2DVector, I&, C&, R!Dim X!, Y!, S1!, S2!: S1 = Cos(RollAngle): S2 = Sin(RollAngle)With WorldTransformX = RX * .m11 + RY * .m21Y = RX * .m12 + RY * .m22If X <= 0 Or Y <= 0 Then Exit SubC = Abs2(X, Y)If C < 4& Then C = 4&End WithReDim Vector2D(0 To C + 1)With Vector2D(0)TransformationEx X, Y, CX, CY, WorldTransform.X = X - 0.5!.Y = Y - 0.5!.Rhw = ORHW.Color = OColorEnd WithFor I = 0 To CWith Vector2D(I + 1)R = 2 * Pi * I / CX = RX * Cos(R)Y = RY * Sin(R).X = X * S1 - Y * S2 + CX.Y = X * S2 + Y * S1 + CYTransformationEx X, Y, .X, .Y, WorldTransform.X = X - 0.5!.Y = Y - 0.5!.Rhw = CRHW.Color = CColorEnd WithNextCWPaintPicFlush ' 要先提交精灵的绘制,再画图形(否则层级会有问题)CWD3DDevice9.SetTexture 0, NothingCWD3DDevice9.SetFVF CWP_FVFConstCWD3DDevice9.DrawPrimitiveUP D3DPT_TRIANGLEFAN, C, Vector2D(0), LenB(Vector2D(0))
End SubPublic Sub CWDrawHEllipse(ByVal CX As Single, ByVal CY As Single, ByVal RX As Single, ByVal RY As Single, ByVal CColor As CWColorConstants, Optional ByVal RollAngle As Single)Dim Vector2D() As D2DVector, I&, C&, R!Dim X!, Y!, S1!, S2!: S1 = Cos(RollAngle): S2 = Sin(RollAngle)With WorldTransformX = RX * .m11 + RY * .m21Y = RX * .m12 + RY * .m22If X <= 0 Or Y <= 0 Then Exit SubC = Abs2(X, Y)If C < 4& Then C = 4&End WithReDim Vector2D(0 To C)For I = 0 To CWith Vector2D(I)R = 2 * Pi * I / CX = RX * Cos(R)Y = RY * Sin(R).X = X * S1 - Y * S2 + CX.Y = X * S2 + Y * S1 + CYTransformationEx X, Y, .X, .Y, WorldTransform.X = X - 0.5!.Y = Y - 0.5!.Rhw = 1.Color = CColorEnd WithNextCWPaintPicFlush ' 要先提交精灵的绘制,再画图形(否则层级会有问题)CWD3DDevice9.SetTexture 0, NothingCWD3DDevice9.SetFVF CWP_FVFConstCWD3DDevice9.DrawPrimitiveUP D3DPT_LINESTRIP, C, Vector2D(0), LenB(Vector2D(0))
End SubPublic Sub CWLoadFont(CFont As CWFont, ByVal FName As String, ByVal FSize As Long, Optional ByVal FBold As CWFBStyle = CWF_Normal, Optional ByVal FItalic As Boolean)CWFontNum = CWFontNum + 1CFont.SNum = CWFontNumReDim Preserve CWFontList(CWFontNum)D3DXCreateFontW CWD3DDevice9, FSize, 0, FBold, 0, FItalic, 1, 0, 4, 0, FName, CWFontList(CWFontNum)
End SubPublic Sub CWCalcrFont(CFont As CWFont, ByVal Text As String, ByRef OutWidth As Long, ByRef OutHeight As Long, Optional ByVal SingleLine As Boolean)Dim rc As D3DRECT, txtl As Longtxtl = Len(Text)If txtl <> 0 ThenDim fmt&: fmt = DT_CALCRECT Or DT_NOCLIPIf SingleLine Then fmt = fmt Or DT_SINGLELINECWFontList(CFont.SNum).DrawTextW Nothing, ByVal Text, txtl, rc, fmt, CWColorNoneOutWidth = rc.X2 - rc.X1OutHeight = rc.Y2 - rc.Y1ElseIf SingleLine ThenCWFontList(CFont.SNum).DrawTextW Nothing, vbNullChar, 1, rc, DT_CALCRECT Or DT_SINGLELINE, CWColorNoneOutWidth = 0OutHeight = rc.Y2 - rc.Y1ElseOutWidth = 0OutHeight = 0End If
End SubPublic Sub CWPrintFont(CFont As CWFont, ByVal Text As String, ByVal PrintX As Long, ByVal PrintY As Long, ByVal FBOXWidth As Long, ByVal FBOXHeight As Long, ByVal CColor As CWColorConstants, Optional ByVal FAlign As CWFAlign)Dim rc As D3DRECT, txtl As Long, TexMatrix As D3DMATRIXtxtl = Len(Text)If txtl = 0 Then Exit Subrc.X1 = PrintXrc.Y1 = PrintYrc.X2 = PrintX + FBOXWidthrc.Y2 = PrintY + FBOXHeightIf CWSpState = Ended ThenCWFontList(CFont.SNum).DrawTextW Nothing, ByVal Text, txtl, rc, FAlign, CColorExit SubEnd IfWith TexMatrix.m11 = WorldTransform.m11.m12 = WorldTransform.m12.m21 = WorldTransform.m21.m22 = WorldTransform.m22.m33 = 1!.m44 = 1!.m41 = WorldTransform.mdx.m42 = WorldTransform.mdyEnd WithCWSprite.SetTransform TexMatrixIf CWFontList(CFont.SNum).DrawTextW(CWSprite, ByVal Text, txtl, rc, FAlign, CColor) > 0 ThenCWSpState = DrawedEnd If
End SubPublic Sub CWPrintFontTop(CFont As CWFont, ByVal Text As String, ByVal PrintX As Long, ByVal PrintY As Long, ByVal FBOXWidth As Long, ByVal FBOXHeight As Long, ByVal CColor As CWColorConstants, Optional ByVal FAlign As CWFAlign)Dim rc As D3DRECT, txtl As Long, TexMatrix As D3DMATRIXtxtl = Len(Text)If txtl = 0 Then Exit Subrc.X1 = PrintXrc.Y1 = PrintYrc.X2 = PrintX + FBOXWidthrc.Y2 = PrintY + FBOXHeightIf CWSpState = Ended ThenCWFontList(CFont.SNum).DrawTextW Nothing, ByVal Text, txtl, rc, FAlign, CColorExit SubEnd IfWith TexMatrix.m11 = WorldTransform.m11.m12 = WorldTransform.m12.m21 = WorldTransform.m21.m22 = WorldTransform.m22.m33 = 1!.m44 = 1!.m41 = WorldTransform.mdx.m42 = WorldTransform.mdyEnd WithCWSpriteSP.SetTransform TexMatrixCWFontList(CFont.SNum).DrawTextW CWSpriteSP, ByVal Text, txtl, rc, FAlign, CColor
End SubPublic Sub CWLoadMusic(Music As CWMusic, ByVal MPath As String)Dim PathS As String, dshow As New FilgraphManagerPathS = GetShortName(MPath)Set dshow = New FilgraphManagerdshow.RenderFile PathSWith MusicIf .ID = 0 ThenCWMusicNum = CWMusicNum + 1.ID = CWMusicNumReDim Preserve CWMusicList(1 To CWMusicNum)End IfEnd WithWith CWMusicList(Music.ID)Set .mc = dshowSet .mp = dshowSet .ba = dshowSet .vw = dshowSet .evt = dshow
On Error Resume NextWith .vw.AutoShow = False.Owner = CWHwndEnd WithEnd With
End SubPublic Sub CWPlayMusic(Music As CWMusic, ByVal MPState As CWMPModel)With CWMusicList(Music.ID)Select Case MPStateCase CWM_Once.IsLoop = FalseCase CWM_Repeat.IsLoop = TrueIf .mp.CurrentPosition > .mp.Duration - 0.1 Then.mp.CurrentPosition = 0End IfCase CWM_Restart.IsLoop = False.mp.CurrentPosition = 0End Select.mc.RunEnd With
End SubPublic Sub CWPauseMusic(Music As CWMusic)With CWMusicList(Music.ID).mc.PauseEnd With
End SubPublic Sub CWStopMusic(Music As CWMusic)With CWMusicList(Music.ID).mc.Stop.mp.CurrentPosition = 0.mc.StopWhenReadyEnd With
End SubPublic Sub CWDelMusic(Music As CWMusic)With CWMusicList(Music.ID)If Not (.mc Is Nothing) Then.mc.StopSet .mc = NothingEnd IfSet .mp = NothingSet .ba = NothingSet .vw = NothingEnd With
End Sub' 设置音量
Public Sub CWSetMusicVol(Music As CWMusic, ByVal mVolume As Single)With CWMusicList(Music.ID).ba.Volume = VolumeToDecibel(mVolume)End With
End Sub' 设置声道平衡
Public Sub CWSetMusicPan(Music As CWMusic, ByVal mBalance As Single)With CWMusicList(Music.ID)If mBalance > 0 Then.ba.Balance = -VolumeToDecibel(1000 - mBalance)Else.ba.Balance = VolumeToDecibel(1000 + mBalance)End IfEnd With
End Sub' 设置速度(音高)
Public Sub CWSetMusicRate(Music As CWMusic, ByVal mPitch As Single)With CWMusicList(Music.ID).mp.Rate = mPitchEnd With
End Sub' 获取播放时长(整数部分为秒数,小数部分用于微调)
Public Property Get CWMusicDuration(Music As CWMusic) As DoubleWith CWMusicList(Music.ID)CWMusicDuration = .mp.DurationEnd With
End Property' 获取播放进度
Public Property Get CWMusicPosition(Music As CWMusic) As DoubleWith CWMusicList(Music.ID)CWMusicPosition = .mp.CurrentPositionEnd With
End Property' 设置播放进度
Public Property Let CWMusicPosition(Music As CWMusic, ByVal mPos As Double)With CWMusicList(Music.ID).mp.CurrentPosition = mPosEnd With
End Property' PicMode 为Ture表示PS的线性减淡模式(用于贴图作为光源)
' PicMode 为False表示原来的光照模式(用于填充图形作为光源)
Public Sub LightEFOpen(Optional ByVal PicMode As Boolean)CWPaintPicFlushIf PicMode ThenCWD3DDevice9.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHACWD3DDevice9.SetRenderState D3DRS_DESTBLEND, D3DBLEND_ONEElseCWD3DDevice9.SetRenderState D3DRS_SRCBLEND, D3DBLEND_DESTCOLORCWD3DDevice9.SetRenderState D3DRS_DESTBLEND, D3DBLEND_SRCALPHAEnd If
End SubPublic Sub LightEFClose()CWPaintPicFlushCWD3DDevice9.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHACWD3DDevice9.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA
End SubPublic Sub CWClipperOpen(ByVal X As Long, ByVal Y As Long, ByVal Width As Long, ByVal Height As Long)CWPaintPicFlushDim rc As D3DRECTWith rc.X1 = X: .X2 = X + Width.Y1 = Y: .Y2 = Y + HeightEnd WithWith CWD3DDevice9.SetRenderState D3DRS_SCISSORTESTENABLE, True.SetScissorRect rcEnd With
End SubPublic Sub CWClipperClose()CWPaintPicFlushCWD3DDevice9.SetRenderState D3DRS_SCISSORTESTENABLE, False
End SubPublic Sub CWCheckKey(ByVal CWKeyAscii As Integer, CWKeySpecies As CWKeyState)Select Case GetAsyncKeyState(CWKeyAscii) < 0Case CWKUIf CWKeySpecies.PUP Then CWKeySpecies.PUPMoment = FalseIf CWKeySpecies.PDown Then CWKeySpecies.PUPMoment = TrueCWKeySpecies.PDownMoment = FalseCWKeySpecies.PUP = TrueCWKeySpecies.PDown = FalseCase CWKDIf CWKeySpecies.PDown Then CWKeySpecies.PDownMoment = FalseIf CWKeySpecies.PUP Then CWKeySpecies.PDownMoment = TrueCWKeySpecies.PUPMoment = FalseCWKeySpecies.PDown = TrueCWKeySpecies.PUP = FalseEnd Select
End SubPublic Sub CWCheckKeySP(ByVal CWKeyAscii As Integer, CWKeySpecies As CWKeyStateSP)Select Case GetAsyncKeyState(CWKeyAscii) < 0Case CWKUIf CWKeySpecies.PUP Then CWKeySpecies.PUPMoment = FalseIf CWKeySpecies.PDown Then CWKeySpecies.PUPMoment = TrueCWKeySpecies.PDownMoment = FalseCWKeySpecies.PUP = TrueCWKeySpecies.PDown = FalseCase CWKDIf CWKeySpecies.PDown Then CWKeySpecies.PDownMoment = FalseIf CWKeySpecies.PUP Then CWKeySpecies.PDownMoment = TrueCWKeySpecies.PUPMoment = FalseCWKeySpecies.PDown = TrueCWKeySpecies.PUP = FalseEnd Select
End SubPublic Sub CWCheckKeyMul(ByVal CWKeyAscii1 As Integer, ByVal CWKeyAscii2 As Integer, CWKeySpecies As CWKeyState)Select Case (GetAsyncKeyState(CWKeyAscii1) < 0) Or (GetAsyncKeyState(CWKeyAscii2) < 0)Case CWKUIf CWKeySpecies.PUP Then CWKeySpecies.PUPMoment = FalseIf CWKeySpecies.PDown Then CWKeySpecies.PUPMoment = TrueCWKeySpecies.PDownMoment = FalseCWKeySpecies.PUP = TrueCWKeySpecies.PDown = FalseCase CWKDIf CWKeySpecies.PDown Then CWKeySpecies.PDownMoment = FalseIf CWKeySpecies.PUP Then CWKeySpecies.PDownMoment = TrueCWKeySpecies.PUPMoment = FalseCWKeySpecies.PDown = TrueCWKeySpecies.PUP = FalseEnd Select
End SubPublic Sub CWKeyboardCheck() '键盘检测CWCheckKey vbKeyA, CWKeyboard.ACWCheckKey vbKeyB, CWKeyboard.BCWCheckKey vbKeyC, CWKeyboard.CCWCheckKey vbKeyD, CWKeyboard.DCWCheckKey vbKeyE, CWKeyboard.ECWCheckKey vbKeyF, CWKeyboard.FCWCheckKey vbKeyG, CWKeyboard.GCWCheckKey vbKeyH, CWKeyboard.HCWCheckKey vbKeyI, CWKeyboard.ICWCheckKey vbKeyJ, CWKeyboard.jCWCheckKey vbKeyK, CWKeyboard.KCWCheckKey vbKeyL, CWKeyboard.LCWCheckKey vbKeyM, CWKeyboard.MCWCheckKey vbKeyN, CWKeyboard.NCWCheckKey vbKeyO, CWKeyboard.OCWCheckKey vbKeyP, CWKeyboard.PCWCheckKey vbKeyQ, CWKeyboard.QCWCheckKey vbKeyR, CWKeyboard.RCWCheckKey vbKeyS, CWKeyboard.SCWCheckKey vbKeyT, CWKeyboard.TCWCheckKey vbKeyU, CWKeyboard.UCWCheckKey vbKeyV, CWKeyboard.VCWCheckKey vbKeyW, CWKeyboard.WCWCheckKey vbKeyX, CWKeyboard.XCWCheckKey vbKeyY, CWKeyboard.YCWCheckKey vbKeyZ, CWKeyboard.ZCWCheckKey vbKeyUp, CWKeyboard.UPCWCheckKey vbKeyDown, CWKeyboard.DownCWCheckKey vbKeyLeft, CWKeyboard.LeftCWCheckKey vbKeyRight, CWKeyboard.RightCWCheckKey vbKeySpace, CWKeyboard.SpaceCWCheckKey 13, CWKeyboard.Enter'CWCheckKey vbKeyShift, CWKeyboard.ShiftCWCheckKeyMul &HA0, &HA1, CWKeyboard.Shift'CWCheckKey vbKeyControl, CWKeyboard.CtrlCWCheckKeyMul &HA2, &HA3, CWKeyboard.Ctrl'CWCheckKey vbKeyMenu, CWKeyboard.Alt        '需要修正CWCheckKeyMul &HA4, &HA5, CWKeyboard.AltCWCheckKey vbKeyTab, CWKeyboard.TabCWCheckKey vbKeyBack, CWKeyboard.BackSpaceCWCheckKey vbKeyF1, CWKeyboard.F1CWCheckKey vbKeyF2, CWKeyboard.F2CWCheckKey vbKeyF3, CWKeyboard.F3CWCheckKey vbKeyF4, CWKeyboard.F4CWCheckKey vbKeyF5, CWKeyboard.F5CWCheckKey vbKeyF6, CWKeyboard.F6CWCheckKey vbKeyF7, CWKeyboard.F7CWCheckKey vbKeyF8, CWKeyboard.F8CWCheckKey vbKeyF9, CWKeyboard.F9CWCheckKey vbKeyF10, CWKeyboard.F10CWCheckKey vbKeyF11, CWKeyboard.F11CWCheckKey vbKeyF12, CWKeyboard.F12CWCheckKey vbKeyInsert, CWKeyboard.InsertCWCheckKey vbKeyDelete, CWKeyboard.DeleteCWCheckKey vbKeyPageUp, CWKeyboard.PageUpCWCheckKey vbKeyPageDown, CWKeyboard.PageDownCWCheckKey vbKeyHome, CWKeyboard.HomeCWCheckKey vbKeyEnd, CWKeyboard.EndCWCheckKeyMul vbKey0, vbKeyNumpad0, CWKeyboard.Num0CWCheckKeyMul vbKey1, vbKeyNumpad1, CWKeyboard.Num1CWCheckKeyMul vbKey2, vbKeyNumpad2, CWKeyboard.Num2CWCheckKeyMul vbKey3, vbKeyNumpad3, CWKeyboard.Num3CWCheckKeyMul vbKey4, vbKeyNumpad4, CWKeyboard.Num4CWCheckKeyMul vbKey5, vbKeyNumpad5, CWKeyboard.Num5CWCheckKeyMul vbKey6, vbKeyNumpad6, CWKeyboard.Num6CWCheckKeyMul vbKey7, vbKeyNumpad7, CWKeyboard.Num7CWCheckKeyMul vbKey8, vbKeyNumpad8, CWKeyboard.Num8CWCheckKeyMul vbKey9, vbKeyNumpad9, CWKeyboard.Num9CWCheckKey vbKeyEscape, CWKeyboard.ESC
End SubPublic Sub CWMouseCheck() '鼠标检测Dim CWMXY As POINTAPIGetCursorPos CWMXYIf CWDModelW = CW_FullScreen ThenCWMouse.X = CWMXY.XCWMouse.Y = CWMXY.YIf IsActive ThenCWCheckKey vbKeyLButton, CWMouse.LeftKeyCWCheckKey vbKeyRButton, CWMouse.RightKeyCWCheckKeySP vbKeyMButton, CWMouse.MidKeyCWCheckKey 5, CWMouse.BackKeyCWCheckKey 6, CWMouse.ForwardKeyEnd IfElseDim rc As D3DRECTIsHitWnd = WindowFromPoint(CWMXY.X, CWMXY.Y) = CWHwndGetClientRect CWHwnd, rcScreenToClient CWHwnd, CWMXYIf IsHitWnd Then IsHitWnd = PtInRect(rc, CWMXY.X, CWMXY.Y)CWMouse.X = (CWMXY.X - rc.X1) * CWDModelX / (rc.X2 - rc.X1)CWMouse.Y = (CWMXY.Y - rc.Y1) * CWDModelY / (rc.Y2 - rc.Y1)If IsActive And IsHitWnd ThenCWCheckKey vbKeyLButton, CWMouse.LeftKeyCWCheckKey vbKeyRButton, CWMouse.RightKeyCWCheckKeySP vbKeyMButton, CWMouse.MidKeyCWCheckKey 5, CWMouse.BackKeyCWCheckKey 6, CWMouse.ForwardKeyEnd IfEnd If
End SubPublic Property Get CWCheckJoyAxis(ByVal jixPos As Long, ByVal Flag As JOYFALGS) As SingleIf Flag ThenjixPos = jixPos \ 256CWCheckJoyAxis = (jixPos - 127 + (jixPos >= &H80&)) / 127!End If
End PropertyPublic Sub CWCheckJoyButton(State As CWKeyState, ByVal IsDown As Boolean)If IsDown ThenIf State.PDown Then State.PDownMoment = FalseIf State.PUP Then State.PDownMoment = TrueState.PUPMoment = FalseState.PDown = TrueState.PUP = FalseElseIf State.PUP Then State.PUPMoment = FalseIf State.PDown Then State.PUPMoment = TrueState.PDownMoment = FalseState.PUP = TrueState.PDown = FalseEnd If
End SubPublic Sub CWJoystickCheck() '摇杆检测Dim I&, j&, jix As JOYINFOEXjix.dwSize = LenB(jix)For I = LBound(CWJoystick) To UBound(CWJoystick)jix.dwFlags = JOY_RETURNALLWith CWJoystick(I).IsConnected = 0 = joyGetPosEx(I, jix)If .IsConnected Then' 读取手柄成功.IsPov = jix.dwPOV >= 0.X = CWCheckJoyAxis(jix.dwXpos, jix.dwFlags And JOY_RETURNX).Y = CWCheckJoyAxis(jix.dwYpos, jix.dwFlags And JOY_RETURNY).Z = CWCheckJoyAxis(jix.dwZpos, jix.dwFlags And JOY_RETURNZ).R = CWCheckJoyAxis(jix.dwRpos, jix.dwFlags And JOY_RETURNR)If Not .IsPov Then .Pov = 0 Else If jix.dwPOV > 0 Then .Pov = jix.dwPOV * 0.01! Else .Pov = 360!Dim jb&: jb = 1For j = LBound(.Btn) To UBound(.Btn)CWCheckJoyButton .Btn(j), jix.dwButtons And jbjb = jb * 2NextElse' 读取手柄失败 (可能是未插入的原因)ZeroMemory CWJoystick(I), LenB(CWJoystick(I))End IfEnd WithNext
End SubPublic Sub AltBUGRepair(ByVal KeyCode As Integer)
If KeyCode = 18 Then
mouse_event RightButtonUpDown, 0, 0, 0, 0
SendMessage CWHwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
End If
End SubPublic Sub MediaBUGRepair()Dim Music As CWMusicFor Music.ID = 1 To CWMusicNumCWDelMusic MusicNext
End SubPublic Sub CWMediaLoopRepair()On Error Resume NextDim I&, evc&For I = 1 To CWMusicNumWith CWMusicList(I)If .IsLoop And Not (.mp Is Nothing) Then.evt.WaitForCompletion 0, evcIf 1 = evc Then .mp.CurrentPosition = 0End IfEnd WithNext
End SubPublic Property Get CWColorARGB(ByVal A As Byte, ByVal R As Byte, ByVal G As Byte, ByVal B As Byte) As CWColorConstantsDim bgra As CWColorWith bgra.Alpha = A.Red = R.Green = G.Blue = BEnd WithGetMem4 VarPtr(bgra), CWColorARGB
End PropertyPublic Property Get CWColorRGBA(ByVal R As Byte, ByVal G As Byte, ByVal B As Byte, Optional ByVal A As Byte = 255) As CWColorConstantsDim bgra As CWColorWith bgra.Alpha = A.Red = R.Green = G.Blue = BEnd WithGetMem4 VarPtr(bgra), CWColorRGBA
End PropertyPublic Property Get GetShortName(ByVal sLongPath As String) As StringDim sShortPath As String, L As LongsShortPath = String$(259, vbNullChar)L = GetShortPathNameW(StrPtr(sLongPath), StrPtr(sShortPath), 260)GetShortName = Left$(sShortPath, L)
End PropertyPublic Sub CWGetFPS()If timeGetTime - CWLongTime > 1000 ThenCWLongTime = timeGetTimeCWFPS = CWFrameCountCWFrameCount = 0ElseCWFrameCount = CWFrameCount + 1End If
End SubPublic Sub CWSetFPS()
Dim S As Long
S = (CLng(1000 / 40) - (timeGetTime - CWTimeNow))If S > 0 Then Sleep SCWTimeNow = timeGetTime
End SubPublic Sub CWPaintPicBegin()If CWSpState <> Ended Then Exit SubCWSpriteSP.Begin (CWP_SpriteConst Or D3DXSPRITE_SORT_TEXTURE)CWSprite.Begin (CWP_SpriteConst)CWSpState = Begined
End SubPublic Sub CWPaintPicEnd()If CWSpState = Ended Then Exit SubCWSpState = EndedCWSprite.EndCWD3DDevice9.SetRenderState D3DRS_ALPHABLENDENABLE, TrueCWD3DDevice9.SetRenderState D3DRS_ALPHATESTENABLE, TrueCWD3DDevice9.SetSamplerState 0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDERCWD3DDevice9.SetSamplerState 0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDERCWSpriteSP.End
End SubPublic Sub CWPaintPicFlush()If CWSpState <> Drawed Then Exit SubCWSpState = BeginedCWSprite.Flush
End SubPublic Property Get CRad(ByVal Angle As Single) As SingleCRad = Angle * Pi / 180!
End PropertyPublic Property Get Abs2(ByVal X As Single, ByVal Y As Single) As SingleAbs2 = Sqr(X * X + Y * Y)
End PropertyPublic Property Get VolumeToDecibel(ByVal Volume As Single) As LongIf Volume <= 0.01 ThenVolumeToDecibel = -10000ElseIf Volume >= 1000# ThenVolumeToDecibel = 0ElseVolumeToDecibel = CLng(2000# * Log(Volume * 0.001) / Log(10#))End If
End Property
'格式转换
Public Sub Transformation(ByRef X!, ByRef Y!, Matrix As CWMatrix)Call TransformationEx(X, Y, X, Y, Matrix)
End Sub
'格式转换
Public Sub TransformationEx(ByRef OutX!, ByRef OutY!, ByVal InX!, ByVal InY!, Matrix As CWMatrix)With MatrixOutX = InX * .m11 + InY * .m21 + .mdxOutY = InX * .m12 + InY * .m22 + .mdyEnd With
End Sub' X = Pt.X - Rect.X: Y = Pt.Y - Rect.Y
' Width = Rect.Width: Height = Rect.Height
Public Property Get CWPtInRect(ByVal X!, ByVal Y!, ByVal Width!, ByVal Height!) As BooleanCWPtInRect = X >= 0! And Y >= 0! And X <= Width And Y <= Height
End Property' X = Rect1.X - Rect2.X: Y = Rect1.Y - Rect2.Y
' Width1 = Rect1.Width: Height1 = Rect1.Height
' Width2 = Rect2.Width: Height2 = Rect2.Height
Public Property Get CWRectInRect(ByVal X!, ByVal Y!, ByVal Width1!, ByVal Height1!, ByVal Width2!, ByVal Height2!) As BooleanCWRectInRect = 0! <= X + Width1 And 0! <= Y + Height1 And X <= Width2 And Y <= Height2
End Property' X = Pt.X - Circle.X: Y = Pt.Y - Circle.Y: R = Circle.R
' X = Circle1.X - Circle2.X: Y = Circle1.Y - Circle2.Y: R = Circle1.R + Circle2.R
Public Property Get CWPtInCircle(ByVal X!, ByVal Y!, ByVal R!) As BooleanCWPtInCircle = X * X + Y * Y <= R * R
End Property

DX9绘图-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(8)相关推荐

  1. 猜歌小游戏多功能组合微信小程序源码下载

    这是一款多功能游戏组合的一款小程序 比如猜歌,摇骰子,真心话大冒险等等 php7.2 mysql5.6 1.上微擎框架 2.将后台两个压缩包上传到addons目录下解压 创建小程序应用 3.后台设置一 ...

  2. 【java毕业设计】基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码)——推箱子游戏

    基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+Eclipse的推箱子游戏设计与实现,文章末尾附有本毕业设计的论文 ...

  3. java毕业设计——基于java+J2ME+sqlserver的打飞机游戏设计与实现(毕业论文+程序源码)——打飞机游戏

    基于java+J2ME+sqlserver的打飞机游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+J2ME+sqlserver的打飞机游戏设计与实现,文章末尾附有本毕业设计的 ...

  4. 【java毕业设计】基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码)——飞机大战游戏

    基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Eclipse的飞机大战游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. ...

  5. 【java毕业设计】基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码)——坦克大战游戏

    基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Socket+Eclipse的坦克大战游戏设计与实现,文章末尾附有本毕业设 ...

  6. java毕业设计——基于java+J2ME的贪吃蛇游戏设计与实现(毕业论文+程序源码)——贪吃蛇游戏

    基于java+J2ME的贪吃蛇游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+J2ME的贪吃蛇游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下载开题报告P ...

  7. 徐州php溪谷_ThinkPHP溪谷H5游戏平台系统V3.0完整版源码

    ThinkPHP溪谷H5游戏平台系统V3.0完整版源码,新增H5游戏盒子APP以及混服系统两大版块, 最新溪谷H5游戏平台系统v3.0完整版源码,在成熟版本H5游戏平台系统基础上开发出的更便捷高效的专 ...

  8. 云开发版高效学习微信小程序源码包含复习资料学习共享护眼精灵等功能

    ☑️ 编号:X0016 ☑️ 品牌:暂无 ☑️ 语言:微信小程序 ☑️ 数据库:无需数据库 ☑️ 类型:微信小程序 ☑️ 规格:小程序 ※ 欢迎关注私信(发消息不限制),领取福利 ※ ☑️ 源码介绍: ...

  9. DX9的一些方法介绍-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(9)

    DX9的一些方法介绍(IDirect3D9) 在前边的源码中,引用了一些DX9的方法,我这里做了一个笔记,大家可以看看. 1,IDirect3DDevice9::SetTexture 方法:将纹理分配 ...

  10. c语言程序设计自学跟谁好,双辽c语言编程学习,双辽学c语言编程哪个好,双辽学c语言编程自学好还是报班好...

    双辽c语言编程学习,双辽学c语言编程哪个好,双辽学c语言编程自学好还是报班好 首页 > 软件 > 双辽c语言编程学习 作者:镀金池   发布时间:2017-12-07 05:48 一个C语 ...

最新文章

  1. Python处理XML文件
  2. JQuery-UI组件化开发
  3. 成考高起专计算机统考试题,成考考试题型
  4. Windows xp/Vista/Linux的内核映射以及内存置换算法
  5. vue基于element-ui制作的成绩管理系统(四)个人信息
  6. 检测ID卡的输入或者是其它卡的输入。
  7. 50个最有价值的数据可视化图表
  8. 云服务器拷贝文件大小,如何从云服务器上拷贝大文件
  9. pandas 提取某几列_用pandas做数据清洗,我一般都这么干
  10. JVM常量池和八种基本数据及字符串
  11. Java实现Excel数据导入数据库
  12. 高数教材班复习Hint(1.8-2.5)
  13. 风景照片转水彩画效果PS动作
  14. Endnote 自定义参考文献样式
  15. 如何将一个HTML页面嵌套在另一个页面中
  16. BDE Installer for RAD Studio
  17. 黑马粉丝感叹:好可呀,好想要!!【最新福利你还没领?】
  18. 游戏工作室的六种赚钱方法
  19. 关于北京生孩子落户口问题集锦
  20. 上海热门共享办公室租赁平台

热门文章

  1. 什么软件好画电路图?
  2. 图像处理:图像拼接简述
  3. 解决Unity模型贴图反转的问题
  4. zynq7000中断系统
  5. springboot毕设项目人格障碍诊断系统212h6(java+VUE+Mybatis+Maven+Mysql)
  6. 可擦写光盘不能擦除和刻写_光盘的分类,光盘的擦除与刻录。
  7. 我的 2019 总结:警钟为谁而鸣
  8. ROS2GO+Cozmo=口袋机器人之人工智能仿真和实验平台
  9. 求马尔科夫模型的转移矩阵
  10. Excel图表的美化操作