Eli olen tutustunut visual basic ohjelmaan vasta n.6kk eli aika alkajainen.
Koulussamme olen ottanu valinnaiseksi ohjelmoinnin ja lopputyötä ollaan tekemässä , olen tekemässä pienimuotoista peliä jossa animaatiota voi liikuttaa näppiksellä ja se ei tunnu onnistuvan , eli jos joku voisi auttaa minua tämän kanssa olisin otettu
t. Parsakaali :)
Kolme teetä sekä , jotain muutakin :)
Tuo on aika epämääräinen kuvailu. Ei kai tämä ole taas niitä "itQ winQ parQ koodatkaa mulle peli"-kategorian pyyntöjä? Voisit kyllä kertoa jutusta enemmän, tai mieluiten esittäisit ongelmasi.
siis haluaisin tietää koodin jolla voin liikuttaa pictureboxia näppäimistöllä en enempää :D olen etsinyt kaikialta mutta mikään ei ole toiminut ja suomalaisten kanssa tätä olisi helpompi setpiä kun ymmärtää enemmön :D
Event näppäinpainalluksille, itse siirto picturebox.locationilla
parsakaali kirjoitti:
peliä jossa animaatiota voi liikuttaa näppiksellä ja se ei tunnu onnistuvan
Tästä väärin pilkutetusta kuvauksesta tuli väkisinkin mieleen jokin tämän tapainen peli.
Mikä nyt on ongelmana? Liikuttaminen, joka jo neuvottiin, vai näppäimen lukeminen, jonka pitäisi VB:ssä olla helppoakin helpompaa (valitset vain valikosta oikean eventin)?
huoh.... eikö kukaan todellakaan voi auttaa minua .. yhden koodin vain tarvis ja sitä ei näytä tulevan...
Hmm... Nyt olet lipsumassa/lipsunut linjalle joka vähentää ennestään muiden auttamishalukkuutta. Valmista koodia(peliä) et luultavasti saa, koska se on koulutyö ja nehän yleensä tehdään itse, mutta jos postaat tänne omasta koodistasi tuon ongelmallisen kohdan (ilmeisesti kuvan liikutus) ja siihen liittyvät osat, voi joku ehkä auttaa paremmin.
Et taida ymmärtää, että kysymyksesi on puutteellinen. Mikäli osaat keyeventin, timerin ja pictureboxin tulostuksen, niin sen jälkeenkin on vielä asioita kuten kiihtyvyys, hidastuvuus yms. Huokailu ei muuten taida auttaa ihan vaan vinkiksi vastaisuuteen.
Mikä VB:n versio on kyseessä?
Moi parsakaali!
Mikäli kyseessä on VB6 niin imppaa täältä VB6-esimerkkiprojekti.
Moi taas parsakaali!
Mikäli kyseessä on VB.NET niin tässä ohjeet SharpDevelop-ympäristöön...
1. Imppaa täältä zip-paketti, pura johonkin kansioon ja siirrä tiedostot QProGIF.ocx ja KeyFile.snk C:\WINDOWS\system32 hakemistoon.
2. Avaa Windowsin komentokehote, kirjoita komentokehotteeseen CD \WINDOWS\system32 ja paina Enter-näppäintä.
3. Kirjoita komentokehotteeseen regsvr32 QProGIF.ocx ja paina Enter-näppäintä.
4. Kirjoita komentokehotteeseen aximp QProGIF.ocx /out:AxQProGIF.dll /keyfile:KeyFile.snk ja paina Enter-näppäintä.
5. Sulje komentokehoteikkuna, Avaa SharpDevelop ja luo uusi Windows forms-projekti (esim. VBNET_AnimGifTest).
6. Valitse MainForm.vb, siirry Design-tilaan, aktivoi Toolbox, klikkaa boxissa hiren oikealla, valitse Configure Sidebar, aktivoi Categoria CustomControls, klikkaa Add Components -painiketta, valitse Custom välilehti, klikkaa File Name ruudun viereistä piniketta, siirry System32 hakemistoon, etsi tiedoston AxQProGIF.dll kuvake, tuplaklikkaa kuvaketta, klikkaa Show Components -nappia, klikkaa OK ja OK.
7. Raahaa AxQProGIF-kontrolli Toolboxin Custom Componets -välilehdeltä formille, iske formille timer-kontrolli (timer1) ja käännä projekti.
8. Siirrä zip-paketista purkamasi pilgrim_with_turkey.gif tiedosto projektisi ..\bin kansioon.
9. Aktivoi axQProGIF1 -kontrolli ja kirjoita Properties-valikon Misc > Filename -ominaisuuden arvoksi axQProGIF1.gif...
Imports System.Windows.Forms Public Partial Class MainForm Private Declare Function GetAsyncKeyState Lib _ "user32.dll" (ByVal vKey As Integer) As Integer Private Declare Function GetForegroundWindow Lib "user32" () As IntPtr Public Sub New() Me.InitializeComponent() End Sub Sub MainForm_Load(sender As Object, e As EventArgs) timer1.Interval = 10 timer1.Enabled = True End Sub Sub MainForm_FormClosing(sender As Object, e As FormClosingEventArgs) timer1.Enabled = False End Sub Sub Timer1_Tick(sender As Object, e As EventArgs) TsekkaaNuolinapit End Sub Private Sub TsekkaaNuolinapit() Dim nappi As Integer, suunta As Integer If Me.Visible And Me.WindowState <> _ FormWindowstate.Minimized _ And GetForegroundWindow() = Me.Handle Then nappi = GetAsyncKeyState(Keys.Up) If nappi = -32767 Then suunta = 1 nappi = GetAsyncKeyState(Keys.Down) If nappi = -32767 Then suunta = 2 nappi = GetAsyncKeyState(Keys.Left) If nappi = -32767 Then suunta = 3 nappi = GetAsyncKeyState(Keys.Right) If nappi = -32767 Then suunta = 4 End If Select Case suunta Case 1 If axQProGIF1.Top >= 10 Then _ axQProGIF1.Top = axQProGIF1.Top - 10 Case 2 If axQProGIF1.Top + axQProGIF1.Height < _ Me.ClientRectangle.Height Then _ axQProGIF1.Top = axQProGIF1.Top + 10 Case 3 If axQProGIF1.Left >= 10 Then _ axQProGIF1.Left = axQProGIF1.Left - 10 Case 4 If axQProGIF1.Left <= Me.Width - _ axQProGIF1.Width - 10 Then _ axQProGIF1.Left = axQProGIF1.Left + 10 End Select End Sub End Class
Koulu projektissa saa käyttää muisten apuja ja kyse on vain yhesta koodista uskoakseni , ja en käytä VB.NET kai :D en edes tiedä mikä tuo on käytän visual basic 2010 ohjelmaa ja jos joku voisi kädestä pitäen niin msn : snow.man@windowslive.com voi lisätä niin voi puhua tarkemmin :)
Ei tota neaa enempää voi auttaa. Jos 6kk olet koodannut niin pitäisi pärjätä sorsilla ja askelohjeilla. Ja kyllä,käytät vb.net:iä.
okke :D mut olen siis koodaillu "koulussa" ja jos tutustuisit meiän ohjelmointi opeen niin kyll yllätyt :D tiedän ohjelmoinnista enemmänkö se ... eli opetus on aika suppeaa .... satunnaisluku generaattoreit käytiin vaan 4h ja sitä rataa
Älä pilkkaa opettajasi taitoja, jos et osaa itse edes lukea näppäinsyötettä ja liikuttaa laatikkoa ruudulla. Opettajasi luultavasti osaisi vähintäänkin selvittää nämä asiat itse, toisin kuin sinä ilmeisesti.
Yleisesti ottaen kaikenlaisten lopputöiden pitäisi olla oman tason mukaisia. Jos kysyt täältä "vähän neuvoa", saatat saada kurssista arvosanan, jota et ole itse ansainnut. Jos kurssillanne ei ole käsitelty tällaisia asioita, luultavasti lopputyönkään ei kuulu sisältää niitä. Ja kääntäen: jos kurssillanne on käsitelty nämä asiat, sinun pitää osata ne itse tai mennä kysymään opettajalta.
ensinnäkin, jos en usko että päättötyöksi kelpaa sellainen softa jossa liikutetaan laatikkoa.
saatika että et olisi tehnyt sitä itse jos copy pasteet.
netti on ohjeita täysi, suosittelen myös esim. Microsoftin step by step kirjoja aiheesta (löytyy myös suomeksi, ainakin vb:stä on aiemmin löytynyt)
kyseisissä kirjoissa lähdetään täysin alkeista, ja kun luet läpi ja teet harjoitukset, olet jo paljon viisaampi eikä perusasioista tarvitse lähteä liikkeelle.
Minulla ei ole mitään vastaan auttamisessa, siksi tänne kirjoittelenkin.
Minulla ei vain ole tarpeeksi aikaa lähteä perusteita opettamaan. se vaatii kuitenkin paljon aikaa ja paljon harjoitustöitä.
Ohjelmointi numeroni on 9 ja opettaja on täys pölvästi ... atk-opettaja joka on käyttänyt yhtä paljon visual basicciä kuin minäkin , ja olen tehnyt picturboxeista animaation jota olisi tarkoitusl liikutella ..
No, tietenkään kurssin laajuutta tietämättä, voisin uskoa että jos sivuaineena lukee ohjelmointia, kurssia vetävä opettaja kokee pienen pettymyksen jos päättötyö on valmiin kontrollin liikuttelua formilla. siinä on joku 10 riviä koodia.
kohta 1, luodaan eventti näppäimen painallukselle
kohta 2, siirtojen käsittely eventissä,konditionaalit eri näppäimille (kasvavat ja pienenevät x ja y koordinaatit, siirto uutena pointtina picturebox.locationiin)
done.
tää on oikeasti ihan peruskauraa. etsi googlella .net vb keyevent, ja .net vb picturebox.location. mahdollisesti while loopin käsittely jos haluat että kontrolli siirtyy niinkauan kuin nappia painat.
jos haluat monimutkaisempaa kuvan liikuttelua, vaikka SDL tutoriaaleja kuvan pyörittämisestä kolmessa ulottuvuudessa.
Moi taas parsakaali!
elikäs jos tarkoituksena on siirrellä pictureboxia lomakkeella etkä pääse oheisen esimerkin avulla jyvälle niin suosittelen pikaista alan vaihtoa...
Public Class Form1 Private MyPictureBox As PictureBox = Nothing Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load Me.KeyPreview = True 'tässä testissä ei tarvitse raahata 'lomakkeelle yhtikäs mitään mitään! MyPictureBox = New PictureBox MyPictureBox.Name = "MyPictureBox" MyPictureBox.Size = New Size(100, 120) MyPictureBox.BackColor = Color.Black Me.Controls.Add(MyPictureBox) MyPictureBox.Left = _ CType((Me.ClientRectangle.Width / 2) _ - (MyPictureBox.Width / 2), Integer) MyPictureBox.Top = _ CType((Me.ClientRectangle.Height / 2) _ - (MyPictureBox.Height / 2), Integer) End Sub Private Sub Form1_PreviewKeyDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs _ ) Handles Me.PreviewKeyDown 'Poistamalla hipsu sanan MsgBox edestä saat 'selville kulloinkin painetun näppäimen koodin 'MsgBox(e.KeyCode) 'tutkitan case rakenteessa onko painettu jotain nuolinäppäintä... Select Case CType(e.KeyCode, Integer) Case 37 'vasen 'jos MyPictureBox'n vasen reuna on suurempi tai yhtäsuurikuin '10 piirtoyksikköä lomakkeen piirtoalueen vsemmasta reunasta niin... If MyPictureBox.Left >= Me.ClientRectangle.Left + 10 Then 'siirretään MyPictureBox'ä 10 yksikköä vasemmalle MyPictureBox.Left = MyPictureBox.Left - 10 'jos taas MyPictureBox vasemman reunan etäissys 'mitattuna lomakkeen piirtoalueen reunasta suurempi 'kuin 0 ja pinenmpi kuin 10 yksikköä niin... ElseIf MyPictureBox.Left > 0 And MyPictureBox.Left < 10 Then 'MyPictureBox siirretään lomakkeen piirtoalueen vasempaan reunaan MyPictureBox.Left = Me.ClientRectangle.Left End If Case 38 'ylös 'jos MyPictureBox yläreuna on suurempi tai yhtäsuurikuin '10 piirtoyksikköä lomakkeen piirtoalueen yläreunasta niin... If MyPictureBox.Top >= Me.ClientRectangle.Top + 10 Then 'MyPictureBox siirretään lomakkeella 10 piirtoyksikköä ylöspäin MyPictureBox.Top = MyPictureBox.Top - 10 'jos taas MyPictureBox yläreunan etäisyys on 'suurempi kuin 0 ja pinempikuin 10 piirtoyksikköä 'mitattuna lomakkeen piirtoalueen yläreunasta niin... ElseIf MyPictureBox.Top > 0 And MyPictureBox.Top < 10 Then 'MyPictureBox siirretään lomakkeen piirtoalueen yläreunaa MyPictureBox.Top = Me.ClientRectangle.Top End if Case 39 'oikea 'jos MyPictureBox oikea reuna, joka saadaan laskemalla 'yhteen MyPictureBox vasemman reunan sijainti lomkkeen 'piirtoalueella ja MyPictureBox leveys, on pienempi tai 'yhtäsuuri kuin lomkkeen piirtoalueen leveys (eli 'lomkkeen piirtoalueen oikea reuna) -10 niin... If MyPictureBox.Left + MyPictureBox.Width _ <= Me.ClientRectangle.Width -10 Then 'MyPictureBox siirretään lomakkeella '10 piirtoyksikkä oikealle MyPictureBox.Left = MyPictureBox.Left + 10 'jos taas MyPictureBox oikean reunan sijainti 'on suurempikuin 0 ja pienempi kuin 10 piirtoyksikköä 'lomakkeen piirtoalueen oikeasta reunasta niin... ElseIf Me.ClientRectangle.Width - _ (MyPictureBox.Left + MyPictureBox.Width) > 0 And _ Me.ClientRectangle.Width - _ (MyPictureBox.Left + MyPictureBox.Width) < 10 Then 'MyPictureBox siirretään lomakkeen 'piirtoalueen oikeaan reunaan MyPictureBox.Left = _ Me.ClientRectangle.Width - MyPictureBox.width End If Case 40 'alas 'jos MyPictureBox alareuna, joka saadaan laskemalla 'yhteen MyPictureBox yläreuna (top) ja MyPictureBox 'korkeus (height), on peinempi tai yhtäsuurikuin 'lomakkeen piirtoalueen korkeus - 10 niin... If (MyPictureBox.Top + MyPictureBox.Height) _ <= Me.ClientRectangle.Height - 10 Then 'MyPictureBox siirretään lomakkeella '10 piirtoyksikkö alaspäin MyPictureBox.Top = MyPictureBox.Top + 10 'jos taas MyPictureBox alareunan etäisyys 'lomakkeen piirtoalueen alareunasta on 'suurempikuin 0 ja pienempikuin 10 piirtoyksikköä niin... ElseIf Me.ClientRectangle.Height - _ (MyPictureBox.Top + MyPictureBox.Height) > 0 _ And Me.ClientRectangle.Height - _ (MyPictureBox.Top + MyPictureBox.Height) < 10 Then 'MyPictureBox siirretään lomakkee alareunaan MyPictureBox.Top = _ Me.ClientRectangle.Height - MyPictureBox.Height End If End Select End Sub End Class
sensijaan jos tarkoituksena oli vaihdella eri pictureboxien kuvia tietyn näppäimen painalluksen perusteella eikä oheinen esimerkki aukea niin suosittelen jälleen samaa kuin edellä...
'tässäkään esimerkissä lomakkeelle ei tarvitse raahata yhtikäs 'mitään vaan riittää, että painelee näppäimiä A, B, C & D Imports System.Drawing Public Class Form1 Private MyPictureBox(3) As PictureBox Private KuvaKansio As String = String.Empty Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load Me.KeyPreview = True KuvaKansio = Application.StartupPath + "\kuvat" If Dir(KuvaKansio, vbDirectory) = "" Then MkDir(KuvaKansio) End If For i As Integer = 0 To 3 MyPictureBox(i) = New PictureBox MyPictureBox(i).Size = New Size(50, 50) Select Case i Case 0 MyPictureBox(i).Name = "PictureBoxA" MyPictureBox(i).Left = 10 MyPictureBox(i).Top = 10 Case 1 MyPictureBox(i).Name = "PictureBoxB" MyPictureBox(i).Left = _ MyPictureBox(0).Left + _ MyPictureBox(0).Width + 10 MyPictureBox(i).Top = 10 Case 2 MyPictureBox(i).Name = "PictureBoxC" MyPictureBox(i).Left = 10 MyPictureBox(i).Top = MyPictureBox(0).Top _ + MyPictureBox(0).Height + 10 Case 3 MyPictureBox(i).Name = "PictureBoxD" MyPictureBox(i).Left = _ MyPictureBox(2).Left + _ MyPictureBox(2).Width + 10 MyPictureBox(i).Top = MyPictureBox(1).Top _ + MyPictureBox(1).Height + 10 End Select Me.Controls.Add(MyPictureBox(i)) Next If Dir(KuvaKansio) = "" Then Dim fontti As New Font("Arial", 12) For i As Integer = 1 To 5 Dim väri As Color Select Case i Case 1 väri = Color.Black Case 2 väri = Color.Red Case 3 väri = Color.Blue Case 4 väri = Color.Aqua Case 5 väri = Color.Yellow End Select For j As Integer = 1 To 4 Dim merkkijono As String = String.Empty Select Case j Case 1 merkkijono = "A" + CStr(i) Case 2 merkkijono = "B" + CStr(i) Case 3 merkkijono = "C" + CStr(i) Case 4 merkkijono = "D" + CStr(i) End Select Dim bittikartta As New Bitmap( _ MyPictureBox(0).Width, MyPictureBox(0).Height) Dim grafiikka As Graphics = Graphics.FromImage(bittikartta) Dim pensseli As New SolidBrush(väri) grafiikka.DrawString(merkkijono, fontti, pensseli, 5, 5) Dim KokoPolku As String = KuvaKansio + _ "\" + "kuva" + merkkijono + ".bmp" bittikartta.Save(KokoPolku) pensseli = Nothing grafiikka = Nothing bittikartta = Nothing Next j Next i End If End Sub Private Sub Form1_PreviewKeyDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs _ ) Handles Me.PreviewKeyDown Static laskuriA As Integer Static laskuriB As Integer Static laskuriC As Integer Static laskuriD As Integer Dim TiedostoNimi As String = String.Empty Dim TiedostoPolku As String = String.Empty Select Case e.KeyData.ToString Case "A" laskuriA += 1 TiedostoNimi = "kuvaA" + CStr(laskuriA) + ".bmp" TiedostoPolku = KuvaKansio + "\" + TiedostoNimi If Dir(TiedostoPolku) = "" Then MsgBox("Tiedostoa '" + TiedostoPolku + "' ei löydy") Else MyPictureBox(0).ImageLocation = TiedostoPolku End If If laskuriA = 5 Then laskuriA = 0 Case "B" laskuriB += 1 TiedostoNimi = "kuvaB" + CStr(laskuriB) + ".bmp" TiedostoPolku = KuvaKansio + "\" + TiedostoNimi If Dir(TiedostoPolku) = "" Then MsgBox("Tiedostoa '" + TiedostoPolku + "' ei löydy") Else MyPictureBox(1).ImageLocation = TiedostoPolku End if If laskuriB = 5 Then laskuriB = 0 Case "C" laskuriC += 1 TiedostoNimi = "kuvaC" + CStr(laskuriC) + ".bmp" TiedostoPolku = KuvaKansio + "\" + TiedostoNimi If Dir(TiedostoPolku) = "" Then MsgBox("Tiedostoa '" + TiedostoPolku + "' ei löydy") Else MyPictureBox(2).ImageLocation = TiedostoPolku End if If laskuriC = 5 Then laskuriC = 0 Case "D" laskuriD += 1 TiedostoNimi = "kuvaD" + CStr(laskuriD) + ".bmp" TiedostoPolku = KuvaKansio + "\" + TiedostoNimi If Dir(TiedostoPolku) = "" Then MsgBox("Tiedostoa '" + TiedostoPolku + "' ei löydy") Else MyPictureBox(3).ImageLocation = TiedostoPolku End if If laskuriD = 5 Then laskuriD = 0 End Select End Sub End Class
jos taas pictureboxit eivät ole välttämättömyys niin voisit piirrellä esim. osin transparenttia .gif kuvaa suoraan lomakkeelle ja rakennella halutessasi vaikka kuinka hienoja location map systeemejä...
Public Class Form1 Private ukkoX As Integer Private ukkoY As Integer Private bm As New Bitmap("ukko.gif") Private rect As Rectangle Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load Me.KeyPreview = True rect.Width = bm.Width rect.Height = bm.Height End Sub Private Sub Form1_Shown(sender as Object, _ e as EventArgs) Handles Form1.Shown SendKeys.Send("{DOWN}") End Sub Private Sub Form1_PreviewKeyDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs _ ) Handles Me.PreviewKeyDown Dim gr As Graphics = Graphics.FromHwnd(Me.Handle) Dim Siirto As Boolean = False Select Case CType(e.KeyCode, Integer) Case 37 If ukkoX >= 5 Then ukkoX -= 5: Siirto = True End If Case 38 If ukkoY >= 5 Then ukkoY -= 5: Siirto = True End If Case 39 If ukkoX <= Me.ClientRectangle.Width _ - (bm.Width + 5) Then ukkoX += 5: Siirto = True End If Case 40 If ukkoY <= Me.ClientRectangle.Height _ - (bm.Height + 5) Then ukkoY += 5: : Siirto = True End If End Select If Siirto Then Me.Refresh rect.Location = New Point(ukkoX, ukkoY) gr.DrawImage(bm, rect, 0, 0, bm.Width, _ bm.Height, GraphicsUnit.Pixel) End if gr = Nothing End Sub End Class
Aihe on jo aika vanha, joten et voi enää vastata siihen.