Trang 1 trên tổng số 4 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 33 kết quả

Đề tài: Làm thế nào để các nhân vật trong game có thể di chuyển

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    244

    Mặc định Làm thế nào để các nhân vật trong game có thể di chuyển

    mình có thấy 1 số game người ta vẽ các nhân vật bằng đồ họa 3D nhưng mình không hiểu dùng kỹ thuật gì để có thể lồng nhân vật đó vào những hoạt động,VD như chỉ chuột bấm thì nó chạy
    mình không thể hiểu nổi trong chu trình làm game làm sao người ta có thể lồng code vào được,có công cụ nào hỗ trợ không

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Người ta mô tả đối tượng thực bằng cách ghép nhiều mảnh đa giác cong lại với nhau. Mỗi nhân vật là một đối tượng, có tọa độ trong không gian. Di chuyển nhân vật chẳng qua là thay đổi tọa dộ của đối tượng. Sau đó engine đồ họa sẽ chiếu nó lên màn hình và tạo ra hình ảnh 3d trên màn hình 2d. Bạn có thể dùng opengl, directx để lập trình.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    04 2008
    Bài viết
    244

    Người ta mô tả đối tượng thực bằng cách ghép nhiều mảnh đa giác cong lại với nhau. Mỗi nhân vật là một đối tượng, có tọa độ trong không gian. Di chuyển nhân vật chẳng qua là thay đổi tọa dộ của đối tượng. Sau đó engine đồ họa sẽ chiếu nó lên màn hình và tạo ra hình ảnh 3d trên màn hình 2d. Bạn có thể dùng opengl, directx để lập trình.
    VD nhé: mình giả sử mình vẽ được 1 nhân vật bằng photoshop,mình load được cái hình đó vào VC++ ( không rõ là định dạng hình đó sẽ là gì nữa,jpg ah???)
    vậy theo như bạn nói thì mình sẽ phải lập từng hàm số học trong không gian cho mỗi chuyển động của mảnh đa giác cong ah

    VD như mình có nhân vật mình muốn mô tả lại nó khi nó chạy chẳng hạn

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    bạn ko thể đem nh6an vật vẽ bằng photoshop vào trong c được. Khi đem vào nó đơn giản chỉ là một bức hình 3d mà thôi. Thay vì vẽ hết bức hình, bạn phải chia bức hình ra nhiều mảnh đa giác và vẽ trên từng mảnh đa giác đó. Sau đó chuyển qua định dạng bmp ( đa số engine đồ họa đều hỗ trợ ) và load vào trong buffer. Các engine đồ họa sau đó sẽ ghép các mảnh đa giác này theo như bạn mô tả và chiếu lên màn hình để tạo ra ảnh 3d. Cái này mình cũng ko chuyên lắm, bạn liên hệ NamVoDang để hỏi thêm nha.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    10 2008
    Nơi ở
    Hà Nội
    Bài viết
    49

    Cả nhà tham khảo nhé, nói thật em cũng chưa đủ trình độ hiểu nhiều đc cái này. Tình cờ lướt web em bắt gặp thấy hay hay post cho mọi người cùng xem.

    Lập trình DirectX 9 với VB.NET
    Giới thiệu DirectX
    DirectX là một bộ các thành phần được thiết kế để giúp lập trình viên có thể phát triển ứng dụng đa phương tiện trên nền Windows như game hay một số ứng dụng khác sử dụng đồ họa 2D, 3D.
    Phiên bản DirectX mới nhất hiện giờ là phiên bản 10, nhưng yêu cầu cấu hình rất cao và chỉ được hỗ trợ trên Windows Vista, phiên bản phổ biến hiện tại là DirectX9, với DirectX9, bạn có thể dễ dàng phát triển ứng dụng 2D, 3D một cách nhanh chóng.
    Những ngôn ngữ hỗ trợ DirectX9 gồm (trong bộ Visual Studio):

    Microsoft Visual C#
    Microsoft Visual Basic.NET
    Microsoft Visual C++
    Bộ thư viện lập trình DirectX được cung cấp bằng các gói DirectX SDK (DirectX Software Development Kit), bạn có thể tải DirectX SDK trên trang của Microsoft.
    DirectX 9 bao gồm các thành phần:
    DirectX Graphics

    DirectDraw: Quản lý đồ họa 2D
    Direct3D: Quản lý đồ họa 3D
    Direct Input: Quản lý các đối tượng điều khiển (bàn phím, chuột, joystick,...)
    Direct Music: Quản lý âm thanh, nhạc (nhạc nền,...)
    Direct Play: Quản lý mạng (để thực hiện các thao tác truyền tải dữ liệu qua mạng, như game online)

    DirectX 9 còn gọi là Managed DirectX (MDX) vì nó được xây dựng cho các ngôn ngữ "Managed" (như VB.NET, C#)

    Cài đặt
    Đầu tiên bạn phải tải bộ DirectX 9 SDK về, phiên bản mới nhất hiện tại là March2008 (mới phát hành vào tháng 3 năm 2008) dung lượng 442.1 MB nhưng không có source mẫu cho VB.NET (vẫn có thể dùng được với VB.NET):
    http://www.microsoft.com/downloads/d...displaylang=en
    Nếu không, bạn có thể tải bản cũ, có source mẫu kèm cho VB.NET, phát hành tháng 12/2002 (222.4 MB) và phải check Validation để down (hơi mệt 1 tí đối với win ko có bản quyền )
    http://www.microsoft.com/downloads/d...DisplayLang=en
    Sau khi download xong, bạn tiến hành cài đặt.
    Cài xong, bạn hãy kiểm tra xem VB.NET nhà bạn đã có thể sử dụng DirectX được chưa.
    Thường thì sẽ có còn rủi ko có thì bạn phải cài lại DxSDK thôi.
    Bắt đầu với DirectDraw
    Cơ bản nhất trong các thành phần của DirectX9: DirectDraw
    Ta sử dụng DirectDraw (DD) để lập trình 2D.
    Bắt đầu, bạn tạo 1 windows application mới, rồi add reference 2 cái thư viện Microsoft.DirectX và Microsoft.DirectX.DirectDraw vào.
    Rồi, vào code của file Form1.vb, gõ vô:
    Code:
    'Báo cáo cho chương trình biết là ta sẽ dùng 2 thư viện này :D 
    Imports Microsoft.DirectX 
    Imports Microsoft.DirectX.DirectDraw
    Ta cần thêm một số biến để quản lý cho DD
    Code:
    Public dddevice As Device = Nothing 'Đối tượng Device cho DD 
    Public psurface As Surface ' 2 cái surface (bề mặt) 
    Public ssurface As Surface ' 
    Private clip As Clipper = Nothing
    Cái Device là để cho DD, 2 cái surface, 1 cái là primary surface và 1 cái là secondary surface. Primary surface là surface nằm trên, cái secondary nằm dưới (giống như 2 miếng giấy chồng lên nhau), những gì ta vẽ lên ssurface sẽ được hiển thị lên psurface để người sử dụng thấy.
    Bây giờ vào Project properties, đặt Startup là Sub Main
    Code:
    Public Shared Sub Main() 
    Dim GameForm As New form1( ) ' Đối tượng dùng để vẽ sẽ là Form1 
    Application.Exit( ) ' Tắt 
    End Sub
    Tại sub main, chúng ta khởi tạo 1 đối tượng của Form1 tên là GameForm, form này sẽ dùng để hiển thị tất cả những gì ta vẽ (nói chung nó là cửa sổ game )
    Trong hàm dựng của class form1
    Code:
    Public Sub New() 
    MyBase.New() ' Gọi hàm dựng của base class 
    InitializeComponent() 
    
    Me.Show() 
    'Khởi tạo device 
    dddevice = Nothing 
    dddevice = New Device() 
    dddevice.SetCooperativeLevel(Me, CooperativeLevelFlags.FullscreenExclusive) 
    Init() 
    Gameloop() 
    End Sub
    Hàm Init để khởi tạo môi trường DirectX và gán môi trường đó vào Form1, hàm Gameloop() là MainLoop (vòng lặp chính - sẽ nói sau) của game.
    Code:
    Public Sub Init( ) 
    psurface = Nothing 
    ssurface = Nothing 
    Dim sdesc As New SurfaceDescription() 
    clip = New Clipper(dddevice) 
    clip.Window = Me 
    sdesc.SurfaceCaps.PrimarySurface = True 
    sdesc.SurfaceCaps.Flip = True 
    sdesc.SurfaceCaps.Complex = True 
    sdesc.BackBufferCount = 1 
    psurface = New Surface(sdesc, dddevice) 
    psurface.Clipper = clip 
    sdesc.Clear() 
    sdesc.SurfaceCaps.BackBuffer = True 
    ssurface = psurface.GetAttachedSurface(sdesc.SurfaceCaps) 
    End Sub
    Code:
    Private Sub Gameloop( ) 
    Do While Me.Created 
    '--------------Thực hiện lệnh---------------- 
    If Not Me.Focused Then 
    Application.DoEvents( ) 
    Else 
    ShowSurface( ) 
    Application.DoEvents( ) 
    End If 
    '-------------------------------------------- 
    Loop 
    ending( ) 
    End Sub
    MainLoop có nhiệm vụ là: thực hiện lặp lại khối lệnh nằm trong khu "Thực hiện lệnh" liên tục cho đến khi nào có điều kiện để kết thúc thì dừng.
    Thủ tục ShowSurface để vẽ lại surface
    Code:
    Public Sub ShowSurface() 
    ssurface.ColorFill(Color.White) 'Xóa bề mặt vừa vẽ (thực chất là tô màu trắng toàn bộ) 
    psurface.Flip(ssurface, FlipFlags.Wait) 'lật ssurface lên trên 
    End Sub
    Thủ tục Ending được gọi khi kết thúc mainloop, có nhiệm vụ hủy hết tất cả các đối tượng được tạo ở trên
    Code:
    Public Sub ending() 
    dddevice.Dispose() 
    psurface.Dispose() 
    ssurface.Dispose() 
    clip.Dispose() 
    End Sub
    Code:
    Private Sub form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown 
    If e.KeyCode = Keys.Escape Then 
    ending() 'Khi gặp phím ESC thì gọi thủ tục ending rồi tắt luôn 
    End 
    End If 
    End Sub
    Sự cố với Surface và khắc phục
    Ở bài viết trên, ta đã tìm hiểu về surface, có một vấn đề ở đây. Đó là khi bạn minimize cửa sổ game rồi đưa lên lại, có thể nó sẽ đen thui, ko thấy gì nữa , trong phần này, ta sẽ khắc phục vấn đề này.
    Trong phần chương trình ở bài trước, ta sẽ thay đổi 1 tí và thêm 1 thủ tục GFocus
    Thủ tục Init()
    Code:
    Public Sub New( ) 
    MyBase.New( ) 
    InitializeComponent( ) 
    Me.Show( ) 
    AddHandler Me.GotFocus, AddressOf GFocus ' Thêm cái này 
    dddevice = Nothing 
    dddevice = New Device( ) 
    dddevice.SetCooperativeLevel(Me, CooperativeLevelFlags.FullscreenExclusive) 
    Init() 
    GameLoop() 
    End Sub
    Dòng lệnh vừa thêm vào: AddHandler Me.GotFocus, AddressOf GFocus để điều khiển sự kiện GotFocus của form, khi form mất focus, các surface sẽ mất, sau đó khi form lại nhận focus thì sẽ thực hiện thủ tục GFocus
    Code:
    Public Sub GFocus(ByVal sender As Object, ByVal e As System.EventArgs) 
    ending() 'Huỷ cái form cũ 
    Dim newform As New Form1() 'tạo lại form mới 
    End Sub
    Sau khi được nhận focus mới, form cũ sẽ bị huỷ và tạo lại 1 form mới.
    Sửa trong ShowSurface() tí
    Code:
    Public Sub ShowSurface() 
    Try 
    ssurface.ColorFill(Color.White) 
    psurface.Flip(ssurface, FlipFlags.Wait) 
    Catch e As Exception 
    Init() 
    End Try 
    End Sub
    Thêm khối try...end try vì khi tạo lại form, hàm init có thể sẽ sinh lỗi.
    Rồi, giờ bạn chạy thử xem, thử thu cửa sổ game xuống taskbar rồi gọi nó lên lại xem giờ thì không bị lỗi như trước nữa
    Load hình vào surface
    Bây giờ ta sẽ tìm hiểu cách để vẽ một hình ảnh lên màn hình bằng cách khởi tạo 1 surface, trên surface đó đã được gắng cái hình cần vẽ lên
    Trong phần khai báo ssurface, psurface, ddevice, bạn thêm vào 1 cái surface nữa tên charsurface
    Code:
    Dim charsurface As Surface
    Thủ tục Init thêm vào đoạn :
    sdesc.Clear()
    sdesc.SurfaceCaps.OffScreenPlain = True
    charsurface = New Surface("gametitle.bmp", sdesc, dddevice)
    Code:
    Public Sub Init( ) 
    psurface = Nothing 
    ssurface = Nothing 
    Dim sdesc As New SurfaceDescription() 
    clip = New Clipper(dddevice) 
    clip.Window = Me 
    sdesc.SurfaceCaps.PrimarySurface = True 
    sdesc.SurfaceCaps.Flip = True 
    sdesc.SurfaceCaps.Complex = True 
    sdesc.BackBufferCount = 1 
    psurface = New Surface(sdesc, dddevice) 
    psurface.Clipper = clip 
    sdesc.Clear() 
    sdesc.SurfaceCaps.BackBuffer = True 
    ssurface = psurface.GetAttachedSurface(sdesc.SurfaceCaps) 
    sdesc.Clear() 
    sdesc.SurfaceCaps.OffScreenPlain = True 
    charsurface = New Surface("gametitle.bmp", sdesc, dddevice) 'Load file gametitle.bmp vào charsurface 
    End Sub
    Đoạn code thêm vào có nhiệm vụ, xoá sdesc đi, lấy file gametitle.bmp từ trên đĩa cứng "dán" vào charsurface và đưa charsurface lên sdesc.
    (sdesc là đối tượng quản lý các surface)
    Trong thủ tục ShowSurface(), ta sẽ vẽ những thứ ta cần tại đây
    Code:
    Public Sub ShowSurface() 
    Try 
    ssurface.ColorFill(Color.White) 
    ssurface.DrawFast(150, 150, charsurface, DrawFastFlags.DoNotWait) 'vẽ charsurface ra 
    ssurface.ForeColor = Color.Black 
    ssurface.DrawText(540, 565, "CaulacboVB", False) 'In lên màn hình dòng chữ CaulacboVB ở toạ độ (540,565), chữ màu đen 
    psurface.Flip(ssurface, FlipFlags.Wait) 
    Catch ex As SurfaceLostException 
    Init() 
    End Try 
    End Sub
    Diễn hoạt (Animation)
    Cái chữ animation là làm cho hình ảnh chuyển động, nôm na là thế, dịch ra tiếng việt nên chọn chữ diễn hoạt cho nó gọn, nhưng chữ đó hơi "xấu"
    Trong bài trên, ta đã biết cách vẽ một hình ảnh ra màn hình, trong bài này, ta sẽ vẽ một hình ảnh chuyển động lên màn hình.
    Ở đoạn load hình trong thủ tục Init, bạn sửa lại tên file là: character.bmp
    (bạn phải dùng paint hoặc photoshop lưu file này lại thành character.bmp - DirectDraw dùng file BMP)
    File character.bmp này, bạn thấy nó có nhiều hình giống nhau mô tả việc di chuyển của 1 thằng cha có râu , ta sẽ load hình này và vẽ từng khúc (frame) của nó, mỗi khúc có kích thước là 141x250 (file này tương đương 4 khúc của hoạt động)
    Thay đổi vị trí vẽ liên tục trong 1 khoảng thời gian ngắng thì sẽ có cảm giác là thằng này đang bước đi thật (cái này thì ai cũng biết, kĩ thuật hoạt hình cơ bản)
    Để xác định được 4 khúc của hình, ta dùng đối tượng Rectangle
    Code:
    Private frames(4) As Rectangle 
    Private charsurface As Surface 
    Private frm4act As Integer = 0
    Viết thủ tục createFrame để xác định vùng nào cần vẽ của frame nào
    Code:
    Public Sub createframes() 
    Dim x As Integer 
    For x = 0 To 3 
    frames(x) = New Rectangle(141 * x, 0, 141, 250) 
    Next 
    End Sub
    đối tượng Rectangle có tham số khởi tạo là (x, y, width, height), mỗi frame ta sẽ vẽ ra có kích thước 141x250 tương đương width=141, height=250, vị trí x=141*x để mỗi frame, chương trình sẽ lấy vị trí khớp cho nó, y=0 là vì, nếu ta lấy giá trị y khác 0, vùng được vẽ ra (viền đỏ) sẽ bị cắt hình.
    Giờ ta sẽ vẽ nó ra, sửa thủ tục ShowSurface thành thế này:
    Code:
    Public Sub ShowSurface() 
    Try 
    ssurface.ColorFill(Color.Red) 
    ssurface.DrawFast(100, 300, charsurface, frames(frm4act), DrawFastFlags.DoNotWait) 
    Catch ex As SurfaceLostException 
    Init() 
    End Try 
    psurface.Flip(ssurface, FlipFlags.Wait) 
    End Sub
    Vẽ charsurface ra với kích thước của frames(frm4act), vị trí 100:300
    frm4act là 1 cái biến thôi, nó cho biết frame hiện tại là frame nào, bây giờ nếu chạy thì ta sẽ chưa thấy nó chuyển động, mục đích của ta là khi nhấn phím mũi tên, thằng râu này nó mới hoạt động, bằng cách tăng giảm giá trị của frm4act.
    Code:
    Private Sub form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown 
    If e.KeyCode = Keys.Right Then 
    frm4act = frm4act + 1 
    if frm4act > 3 then 'Nếu frm4act vượt quá 3 thì 
    frm4act = 0 ' cho nó quay về 0 
    End If 
    ShowSurface( ) 
    End if 
    If e.KeyCode = Keys.Escape Then 
    ending() 
    End 
    End If 
    End Sub
    Giờ test nào, khi nhấn phím mũi tên sang phải, bạn sẽ thấy thằng râu chạy (chỉ hoạt hình thôi), nhưng nó chạy mà ko lết tới trước đc tí nào cả , nếu muốn nó chạy tới, bạn thêm 1 biến x4act để lưu toạ độ x cho nó.
    Code:
    Private x4act As Integer = 100
    lệnh vẽ ở thủ tục Showsurface cũng thay đổi như thế này
    Code:
    ssurface.DrawFast(x4act, 300, charsurface, frames(frm4act), DrawFastFlags.DoNotWait)
    vẽ thằng râu ra với toạ độ x4act:300
    sự kiện keyDown sửa lại
    Code:
    Private Sub form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown 
    If e.KeyCode = Keys.Right Then 
    frm4act = frm4act + 1 
    x4act += 5 ' cho thằng râu chạy tới (thay đổi toạ độ x của nó) 
    if frm4act > 3 then 
    frm4act = 0 
    End If 
    End If 
    ShowSurface( ) 
    End if 
    If e.KeyCode = Keys.Escape Then 
    ending() 
    End 
    End If 
    End Sub
    Giờ chạy thử xem, thằng râu đã chạy được rồi đấy
    Nhưng vẫn còn cái nền màu xám khó chịu, ở bài sau, ta sẽ tìm hiểu cách bỏ cái nền đó.
    Trong suốt
    Ở những bài trước, ta đã biết cách load và vẽ một hình từ file lên màn hình, hoạt hình, tuy nhiên những hình ảnh vẫn bị dính cái nền xám, bài này ta sẽ tìm cách xử chúng
    Nguyên tắc để bỏ cái màu nền xám kia đi là ta đặt thuộc tính ColorKey cho nó, khi ta vẽ một ảnh lên màn hình, với thuộc tính ColorKey để chỉ định màu của cái nền, thì khi vẽ ra, máy sẽ xử lý bỏ cái nền đó đi.
    Giờ ta sẽ khai báo một biến làm ColorKey
    Code:
    Private ck As ColorKey
    Code:
    Public Sub Init( ) 
    
    psurface = Nothing 
    ssurface = Nothing 
    Dim sdesc As New SurfaceDescription() 
    clip = New Clipper(dddevice) 
    clip.Window = targetform 
    sdesc.SurfaceCaps.PrimarySurface = True 
    sdesc.SurfaceCaps.Flip = True 
    sdesc.SurfaceCaps.Complex = True 
    sdesc.BackBufferCount = 1 
    psurface = New Surface(sdesc, dddevice) 
    psurface.Clipper = clip 
    sdesc.Clear() 
    sdesc.SurfaceCaps.BackBuffer = True 
    ssurface = psurface.GetAttachedSurface(sdesc.SurfaceCaps) 
    sdesc.Clear() 
    sdesc.SurfaceCaps.OffScreenPlain = True 
    ck.ColorSpaceHighValue = RGB(153, 153, 153) 
    ck.ColorSpaceLowValue = RGB(153, 153, 153) 
    charsurface = New Surface("character.bmp", sdesc, dddevice) 'initialize new surface 
    charsurface.SetColorKey(ColorKeyFlags.SourceDraw, ck) 'set the color key for the surface 
    
    End Sub
    không có gì đặc biệt, chỉ có khúc này:
    Code:
    ck.ColorSpaceHighValue = RGB(153, 153, 153) 
    ck.ColorSpaceLowValue = RGB(153, 153, 153)
    ColorSpaceHighValue và ColorSpaceLowValue, 2 giá trị này nếu khác nhau thì ảnh sẽ mờ mờ trong trong kiểu như gương, đây là khoảng trong suốt mà ta có thể tùy biến, ở đây ta muốn làm mất luôn cái nền màu xám, vì thế nên ta cho 2 giá trị giống nhau, đều là (153, 153, 153) (đây là mã màu của màu xám trong hệ RGB)
    Sau đó ta gán thuộc tính ColorKey của Surface với ck.
    Code:
    charsurface.SetColorKey(ColorKeyFlags.SourceDraw, ck)
    Bây giờ, ColorKey đã được gán vào cho surface, nhưng vẽ ra thì vẫn chưa thấy mất cái nền, đó là vì ở dòng lệnh vẽ hình, ta vẫn chưa cho nó biết là ta vẽ cái hình ra theo colorKey, bạn hãy sửa thủ tục ShowSurface() thành thế này:
    Code:
    Public Sub ShowSurface() 
    Try 
    ssurface.ColorFill(Color.Red) 
    
    ssurface.DrawFast(x4act, 100, charsurface, frames(frm4act), DrawFastFlags.SourceColorKey) 'Vẽ ra, giờ có thêm tham số DrawFastFlags.SourceColorKey tức là vẽ có xài ColorKey 
    
    Catch ex As SurfaceLostException 
    Init() 
    End Try 
    
    psurface.Flip(ssurface, FlipFlags.Wait) 
    End Sub
    Xong! giờ bạn chạy thử xem nào.
    Hình nền
    Trong phần này, ta sẽ vẽ một hình nền (background) nằm ở phía sau "thằng râu" ở các bài trên, khi "thằng râu" bước đi thì cái hình nền cũng sẽ trượt theo, tạo cảm giác là nó đang bước đi thật (giống kiểu của game mario - gọi là platform game)
    Đầu tiên, ta cần khởi tạo thêm:
    Code:
    Private backrect As Rectangle 
    Private backsurface As Surface = Nothing 
    
    Private xaxis as Integer
    giống như khi vẽ "thằng râu", bạn sẽ có một rectangle làm giới hạn cho khung nhìn, một surface để đưa hình làm nền vào và một biến xaxis để lưu vị trí của nền.
    Sau đó ta viết thủ tục Background() để khởi tạo background
    Code:
    Private Sub Background() 
    Dim sdesc As New SurfaceDescription() 
    sdesc.SurfaceCaps.OffScreenPlain = True 
    backsurface = New Surface("background.bmp", sdesc, dddevice) 
    backrect.Size = New Size(800, 600) 
    End Sub
    và gọi thủ tục Background() ở cuối thủ tục Init()
    Trong đoạn code trên, ta khởi tạo một surface để chứa hình nền, hình sẽ được load từ file background.bmp (có trong cùng thư mục chứa mã nguồn)
    và khởi tạo một rectangle có kích thước 800x600 (kích thước màn hình game), khi vẽ ta sẽ chỉ vẽ một khung chừng đó thôi.






    Ối zời ơi em ê mông rồi, ctrl_C ctrl_V từng dòng một, mệt wa, lâu wa.
    Các bác có đọc chán wa thì nhẹ nhàng với em thôi nhé.
    Đừng oánh em, em sợ crying
    Attached Files Attached Files

  6. #6
    Ngày gia nhập
    04 2008
    Bài viết
    244

    Mặc định Làm thế nào để các nhân vật trong game có thể di chuyển

    cái direct c này na ná OpenLG hả cậu,có dùng được OpenLG không

  7. #7
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    ko na ná đâu ,khác nhau hoàn toàn ấy chứ. Nếu bạn thích OpenGL thì cứ xài OpenGL đi, nó là một engine dồ họa mạnh mà.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  8. #8
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    bạn ko thể đem nh6an vật vẽ bằng photoshop vào trong c được. Khi đem vào nó đơn giản chỉ là một bức hình 3d mà thôi. Thay vì vẽ hết bức hình, bạn phải chia bức hình ra nhiều mảnh đa giác và vẽ trên từng mảnh đa giác đó. Sau đó chuyển qua định dạng bmp ( đa số engine đồ họa đều hỗ trợ ) và load vào trong buffer. Các engine đồ họa sau đó sẽ ghép các mảnh đa giác này theo như bạn mô tả và chiếu lên màn hình để tạo ra ảnh 3d. Cái này mình cũng ko chuyên lắm, bạn liên hệ NamVoDang để hỏi thêm nha.
    mình tưởng người ta sẽ vẽ bằng 3DMath chứ nhỉ
    Đã được chỉnh sửa lần cuối bởi AlexF : 18-10-2008 lúc 09:09 AM.

  9. #9
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Vẽ hình 3d thì thiếu gì tool hay, ai muốn dùng gì cũng được, tùy hỷ.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  10. #10
    Ngày gia nhập
    10 2007
    Bài viết
    169

    mình có thấy 1 số game người ta vẽ các nhân vật bằng đồ họa 3D nhưng mình không hiểu dùng kỹ thuật gì để có thể lồng nhân vật đó vào những hoạt động,VD như chỉ chuột bấm thì nó chạy
    mình không thể hiểu nổi trong chu trình làm game làm sao người ta có thể lồng code vào được,có công cụ nào hỗ trợ không
    Theo mình nghĩ thì còn tùy theo bạn muốn làm game 3D hay 2D nửa! Việc tạo hình bằng phostoshop rồi đem vào dùng trong OpenGL hay Direct3D là một việc "rất phổ biến" trong hầu hết các game 2D (như PS2,PSP,XBOX,PC...)! Chỉ những game nhẹ và không cần cấu hình nhiều thì người ta mới dùng GDI hay GDI+! Bởi vì khi dùng OpenGL hay Direct3D sẻ có Graphics card làm accelerator, giúp tăng tốc việc drawing và tính toán lên đáng kể! Lấy ví dụ nếu bạn muốn fill toàn màng hình, với kích thước ảnh nhỏ thì không thấy khác nhiều giửa GDI và OpenGL hay Direct3D, nhưng khi bạn cho ảnh lớn hơn (800x600 hay 1024x768) thì lúc đó mới thấy dùng GDI chậm như thế nào nếu so với hai cái kia...!

    Việc ghép đa giác, đó là texture mapping! Bạn cứ tưởng tượng như lúc bạn vẻ các hình 3D là tạo khung xương của nhân vật! Sao khi xong bộ xương thì phải ... mặc đồ cho no (tức là map mấy cái texture vào)! Việc các bạn chơi game nhìn thấy hình đẹp hay xấu chủ yếu là do cái này! Map cái texture rỏ, đẹp thì sẻ tốn vram nhiều hơn! Mà vram của card màng hình có bao nhiêu đâu...!

    Về việc chuyển động của nhân vật! Cũng tùy theo 2D hay 3D thôi!

    + Nếu là 2D thì quá dễ! Dễ nhất là bạn cứ tưởng tượng nhân vật của bạn là một hình GIF, trong hình đó có cảnh nhân vậy của bạn đang chạy! Bạn chỉ việc điều chỉnh tốc độ di chuyển của hình sao cho phù hợp với tốc độ chạy của nhân vật là được! Nhưng trong thực tế thì không ai dùng hình GIF cả mà sẻ dùng nhiều hình 32bpp với alpha channed và sẻ cắt hình ra thành từng rectange nhỏ để có thể tương tác với nhân vật khác (như khi đánh nhau, đạn bay trúng,...)! Bạn nên tìm vài quyển sách về lập trình game để xem sẻ tốt hơn!

    + Nếu là 3D, bạn cứ thiết kế nhân vật trong 3DMax rồi đem vào là tốt nhất! Vì 3DMax có phần skeleton cho nhân vật, bạn chỉ cần tạo đoạn scene chuyển đọng cho nhân vật rồi di chuyển skeleton là nó sẻ chạy thôi!

    Nhưng dù làm cách gì thì mình chắc là bạn sẻ thấy rất nhiều việc và khó khăn! Nếu như mục tiêu của bạn là viết game thì mình khuyên bạn nên dùng game engine cho nó dễ! Điển hình là "3D Game Studio A7" - Shareware đó nha - Nhưng có khá nhiều bản share trên mạng có license để bạn download nếu cố gắng tìm , nó sẻ có tài liệu hướng dẩn bạn "3D game step-by-step", chi tiết đến mức không ngờ luôn...! Có rất nhiều game đả dùng cái này để làm, nếu mình không lầm thì còn có cả game "Beyond Good and Evil"!

    Các bạn nên phân biệt rỏ "Graphics Library", "3D Engine" và "Game Engine"!
    + Graphics Library : OpenGL, DirectX
    + 3D Engine : Orge,Irrith
    + Game Engine : 3D Game Studio

Các đề tài tương tự

  1. Tạo chuyển động của nhân vật trong Game với XNA - Tut1
    Gửi bởi zstar trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 59
    Bài viết cuối: 10-10-2015, 04:10 PM
  2. Game Lôi không chuyển được các chế độ chơi trong game lật hình
    Gửi bởi khachung_uit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 19-06-2013, 09:30 PM
  3. Chuyển chuỗi thành ma trận thế cờ (game cờ caro)
    Gửi bởi skul169 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 27-09-2011, 05:30 PM
  4. Xử lý giới hạn di chuyển trong game Xếp Hình?
    Gửi bởi hoangha90 trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 0
    Bài viết cuối: 03-05-2011, 05:30 PM
  5. Game Lập trình Game XNA,Thắc mắc sự kiện bàn phím trong di chuyển menu.
    Gửi bởi Trangkhuyet trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 08-04-2011, 12:26 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn