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 ClassKoulu 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 ClassAihe on jo aika vanha, joten et voi enää vastata siihen.