Stig Jøran Skrevet 31. juli 2005 Del Skrevet 31. juli 2005 Hei Tenkte jeg skulle lage et 2D spill. Veldig simpelt spill egentlig, men det jeg sliter med er å få Pictureboxen til å flytte seg på en bra måte. Den jeg bruker nå er stygg. Picture1.left = clng(1) + clng(picture1.left) Dette er vel ikke noen god måte, må da finnes andre alternativer? Lenke til kommentar
Jonas Skrevet 31. juli 2005 Del Skrevet 31. juli 2005 (endret) Nei, det er slettes ingen god måte. Man bruker aldri slike objekter i spill. I mitt første 2D-spill brukte jeg BitBlt, som funker helt greit om det ikke blir for mye. Forklaring her. Endret 31. juli 2005 av Jonas Lenke til kommentar
Stig Jøran Skrevet 31. juli 2005 Forfatter Del Skrevet 31. juli 2005 Hmm, skjønnte ikke så veldig mye av det, hadde vært kjekt med et lite eksempel på feks å få en .gif fil (tar denne filtypen fordi den kan ha "transparent" bakgrunn) til å flytte seg bortover. Lenke til kommentar
aadnk Skrevet 31. juli 2005 Del Skrevet 31. juli 2005 Med BitBlt behøver du ikke benytte en GIF-fil - alt som trengs er to bilder av det samme objektet der den ene har en svart bakgrunn mens den andre har hvit bakgrunn, såsom eksempelvis følgende: Lim begge bildene inn i to bildebokser (PictureBox) med navn picImage og picMask, hvorpå egenskapen AutoRedraw må settes til True og Visible til False. Legg dernest inn følgende kode: ' API-kall nødvendig for opptegningsprosessenPrivate Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long Private Sub Form_Load() ' Forhindrer flimring Me.AutoRedraw = True End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Fjerner foregående opptegninger Me.Cls ' Tegner opp objekt BitBlt Me.hDC, X, Y, picImage.Width, picImage.Height, picImage.hDC, 0, 0, vbSrcAnd BitBlt Me.hDC, X, Y, picImage.Width, picImage.Height, picMask.hDC, 0, 0, vbSrcPaint End Sub Verre skulle det ikke være. Lenke til kommentar
Stig Jøran Skrevet 31. juli 2005 Forfatter Del Skrevet 31. juli 2005 (endret) Hmm, mener å ha gjort allt rett, får ingen feilmeding eller noe, skjer bare ingenting når jeg kjører programmet, får bare opp bildene i pic-boxene, det følger ikke musepekeren EDIT: måtte gjøre om bildene til .jpg, vb6.0 tok ikke .png, kansje det har noe å si? Endret 31. juli 2005 av Stig Jøran Lenke til kommentar
GeirGrusom Skrevet 31. juli 2005 Del Skrevet 31. juli 2005 (endret) VB6 støtter ikke alpha kaneler på noen som helst type bilder. Da må du bruke TransparentBlt (funskjon fra Win2000) Public Declare Function TransparentBlt Lib "msimg32" (hdcDest As Long, nXOriginDest As Long, nYOriginDest As Long, nWidthDest As Long, nHeightDest As Long, hdcSrc As Long, nXOriginSrc As Long, nYOriginSrc As Long, nWidthSrc As Long, nHeightSrc As Long, crTransparent As Long) As Long crTransparent er det samme som color key for semi transparente bilder, bruker du en funksjon som heter AlphaBlend Public Const AC_SRC_ALPHA = &H01 Public Type BLENDFUNCTION BlendOp As Byte BlendFlags As Byte SourceConstantAlpha As Byte AlphaFormat As Byte ' Satt til AC_SRC_ALPHA hvis bitmap bildet er 32-bit End Type Public Declare Function AlphaBlend Lib "Gdi32" (hdcDest As Long, nXOriginDest As Long, nYOriginDest As Long, nWidthDest As Long, nHeightDest As Long, hdcSrc As Long, nXOriginSrc As Long, nYOriginSrc As Long, nWidthSrc As Long, nHeightSrc As Long, blendFunctionAs BLENDFUNCTION) As Long Men denne er vel et helvete å få til å fungere uten å kunne laste png bilder. Endret 31. juli 2005 av GeirGrusom Lenke til kommentar
Stig Jøran Skrevet 31. juli 2005 Forfatter Del Skrevet 31. juli 2005 Så det ser ut til at jeg må legge inn vb express 2005? Lenke til kommentar
GeirGrusom Skrevet 31. juli 2005 Del Skrevet 31. juli 2005 Eller du kan bruke Direct Draw 7.0 Lenke til kommentar
Stig Jøran Skrevet 31. juli 2005 Forfatter Del Skrevet 31. juli 2005 Eller du kan bruke Direct Draw 7.0 Si meg mer om det, feks et eksempel som jeg kan se på Lenke til kommentar
GeirGrusom Skrevet 31. juli 2005 Del Skrevet 31. juli 2005 Det er så mye greier, du får kikke på MSDN Du må sette referanse til DDraw.dll eller noe slikt, husker ikke helt... Lenke til kommentar
Stig Jøran Skrevet 31. juli 2005 Forfatter Del Skrevet 31. juli 2005 Direct Draw så litt for komplisert ut, men funker det som aadnk sa i VB 2005? Lenke til kommentar
Stig Jøran Skrevet 1. august 2005 Forfatter Del Skrevet 1. august 2005 Visual Basic 2005, tok ingenting av de "kodene". Så eneste dette funker på er Visual Basic 2003(.net)? Lenke til kommentar
Jonas Skrevet 1. august 2005 Del Skrevet 1. august 2005 Det er VB6-koder. Burde ikke være så vannskelig å søke etter navnene og finne .net-versjoner. Lenke til kommentar
GeirGrusom Skrevet 1. august 2005 Del Skrevet 1. august 2005 .NET Framework har et veldig bra gjennomført grafikk API (den bruker GDI+) Du kan gjøre det aller meste som du kan i GDI+ med hjelp av veldig enkle klasser, som System.Drawing.Graphics, System.Drawing.Font, System.Drawing.Color, System.Drawing.LinearGradientBrush etc. Det eneste jeg vet GDI+ har, som ikke .NET har, er effekter, som blur og slikt. For å tegne et bilde i VB.NET gjør du slik: Private Override Sub OnPaint(sender As Object, e As PaintEventArgs) ' Dette er paint eventen, hvor all tegning bør foregå Dim r As Rectangle = New Rectangle(0, 0, 32, 32) ' Demo rektangel Dim img As Bitmap = Bitmap.FromFile("C:\MittBilde.png") ' Bilder skal ikke lastes her (grunnet ytelse) i et ordentlig program, dette er bare for å vise e.Graphics.DrawImage(img, r) img.Dispose() End Sub .NET støtter flere bildeformater, og kan dermed tegne bilder med alpha kanaler, tilogmed 48/64 bit bilder. Lenke til kommentar
Jonas Skrevet 1. august 2005 Del Skrevet 1. august 2005 Det der så jo svært enkelt ut! Hvordan fungerer det i forhold til DX? Raskt eller tregt? Lenke til kommentar
GeirGrusom Skrevet 2. august 2005 Del Skrevet 2. august 2005 Tja, det er tregere en DX, men mye enklere å ha med å gjøre. Det som er irriternede i DX er at du ikke flippe i noe annet en fullscreen, da må man bruke offscreen plain og slikt, GDI har ikke noe sånt, men er også bare laget for å vise enkel grafikk. Det er egentlig ikke laget for å konkurere med DX, det er laget for å bytte ut gamle GDI, med noe som er litt mer objektorientert. Laget en software 3D engine i C#, den er treg, og tegner bare wireframe, men man kan rotere Lenke til kommentar
Moskus Skrevet 8. august 2005 Del Skrevet 8. august 2005 Laget en software 3D engine i C#, den er treg, og tegner bare wireframe, men man kan rotere Akkurat hva jeg trenger! Kan den brukes med VB.Net? Lenke til kommentar
GeirGrusom Skrevet 8. august 2005 Del Skrevet 8. august 2005 Tja, du kan prøve. Jeg har tøyset litt med den nå, men det er stort sett bare Matrix.cs som er viktig, paster den her jeg (jeg har forsøkt å få den til å fungere med OpenGL, uten hell) Det kan være ganske enkelt å oversette, men jeg tror ikke Visual basic kan override operators... du får bare kikk på koden og oversette. Den er laget sånn at du har en vertex, du multipliserer en vertex med en matrise slik: vertex = vertex * matrix du multipliserer en matrix med en matrix slik matrix = matrix * matrix Nå kommer problemet jeg fikk, jeg får ikke perspektiv, men hvis ikke det er så viktig, kan du bare multipliserer alle vertexene med matrisen, og tegne (vertex.x, vertex.y) og figuren skal være rotert/skalert/translert lykke til Matrix.cs Lenke til kommentar
Moskus Skrevet 9. august 2005 Del Skrevet 9. august 2005 Må prøves! Kan jeg tolke det slik at det egentlig er en matrise-kalkulator med noen bestemte operasjoner innebygget? (Det er jo stort sett enkel matrise-regning som gjør "3D-bevegelsene").l Men perspektiv må det jo være mulig å få til. Husker jeg har sett en del formler for å få det til... skal se om jeg klarer å fiske dem frem. Lenke til kommentar
GeirGrusom Skrevet 9. august 2005 Del Skrevet 9. august 2005 (endret) Ja, jeg prøvde PerspectiveFovLH og RH, pluss glFrustum og gluPerspective, uten at noen av de funksjonene så ut til å gjøre noe som helst... annet en å endre aspect ratio. Kanskje dere har bedre hell? Endret 9. august 2005 av GeirGrusom Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå