spinning wheel

Status
Niet open voor verdere reacties.

chrisje181

Gebruiker
Lid geworden
23 okt 2008
Berichten
106
Hallo allemaal,

Wie kan me helpen met een spinning wheel (idee van wheel of fortune) te maken.
Ik weet niet hoe ik moet beginnen qua code. En weet niet hoe ik visueel moet laten zien dat hij draait.

Het gaat om visual basic 2010 express
 
Hoi,

Je kan misschien als eerste even hiernaar kijken: http://msdn.microsoft.com/en-us/library/system.drawing.graphics.aspx.

Wat je eventueel ook kan doen is meerdere plaatjes maken en die achter elkaar aan laten zien in een picturebox. Of misschien een rond plaatje wat je dan laat roteren (ik weet niet of dit echt makkelijker is).

Je moet zelf even kijken wat voor jou het handigste is...

MartinJM
 
heb hetvoor elkaar dat hij kan draaien, maar nu het volgende:

Hij laat nu een sterke closeup zien van de picture. Hoe pas ik dat aan?
Code:
Public Class Form2

    Private picture As Image = My.Resources.image1
    Private angle As Integer

    Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Timer1.Start()
        PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    End Sub

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        'Rotate the image by a further 1 degree.
        Me.angle = (Me.angle + 1) Mod 360

        'Repaint the image.
        Me.PictureBox1.Refresh()
        PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    End Sub

    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles PictureBox1.Paint
        With e.Graphics
            'Move the origin to the centre of the PictureBox.
            .TranslateTransform(Me.PictureBox1.Width \ 2, Me.PictureBox1.Height \ 2)

            'Rotate the world.
            .RotateTransform(Me.angle)

            'Draw the image so its centre coincides with the origin.
            .DrawImage(Me.picture, _
                       -Me.picture.Width \ 2, _
                       -Me.picture.Height \ 2)

        End With
        PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    End Sub
End Class

de picturebox1.sizemode = ...... Werkt niet, ook niet als ik in design mode aanpas.
 
Hoi,

Dat komt omdat een picturebox dingen die je met graphics 'tekent' niet als plaatje ziet. Dat kan je makkelijk zien als je een tweede picturebox toevoegt en dit erbij zet: "PictureBox2.Image = PictureBox1.Image". De tweede picturebox zal leeg blijven...

Als het plaatje iedere keer hetzelfde is, kan je het misschien met 'scaletransform' doen:
Code:
.ScaleTransform(0.5, 0.5)
(0.5 = 50%)

Maar als het niet iedere keer hetzelfde plaatje is, dan kan je natuurlijk zo niet weten hoeveel er gescaled moet worden... Daar zou dan nog iets anders op bedacht moeten worden.

Succes!
MartinJM
 
Tussen "With e.Graphics" en het drawen van de image.
 
heb nog 1 probleempje.

Hij draait nu de image rond in het gehele picturebox, ik wil het liefst dat hij puur om zijn eigen center heen draait, kan dit?
 
Hoi,

Bij mij werkt het als het plaatje vierkant is. Bij rechthoekige plaatjes lijkt het inderdaad niet goed te gaan. Ik ga straks nog wel even kijken of ik erachter kan komen hoe dat komt.

MartinJM


[edit]
Ik weet niet waardoor het komt maar ik heb wel een oplossing: vervang het drawimage gedeelte door het onderstaande. Dat loste bij mij het probleem op.
[/edit]

Code:
            .DrawImage(Me.picture, _
                       -Me.picture.Width \ 2, _
                       -Me.picture.Height \ 2, _
                       Me.picture.Width, _
                       Me.picture.Height)
 
Laatst bewerkt:
dat werkt idd! Top bedankt.
Nu de laatste vraag waar ik hulp bij nodig heb...

Dit is wat ik zou willen:

Het wiel spint eerst gewoon rond.
Na dat je op de knop stop hebt gedrukt moet ie langzaam uitlopen.
Dit had ik bedacht met in totaal 5 timers.
De eerste timer loopt ie in 5 seconden op naar 61 graden (angle=61)
daarna met timer2 een variabel aantal seconde tot maximaal (angle=71) (Tijd is tussen 1 en 10sec, step angle 1)
Daarna met timer 3 loopt ie langzaam uit (step 5 voor 4 seconden)
Daarna timer4 fading uitmet step = 7 voor X seconden (max 6 seconden)
daarna maakt timer5 hem uit met secodnen runtime met 1 step mindering) daarna wordt het wiel gestropt

Wie kan me een beetje opweg helpen, of heeft hier een amdere maniert voor die makkelijker/sneller is.
De totale runtijd is maximaal 40 seconden) nadat de persoon op de stop knop heeft gedrukt,
de tijd die het wiel spint nadat de persoon op de knop spin heeft gedrukt is onbekend.
 
Hoi,

Je kan ook de timer aanpassen. Als je de timer bijvoorbeeld laat beginnen op een interval van 10 milliseconden, dan kan je die langzaam verhogen totdat je bij (bijvoorbeeld) de 100 bent. Dan laat je hem stoppen:
Code:
        'Rotate the image by a further 5 degrees.
        Me.angle = (Me.angle + 5) Mod 360

        'Repaint the image.
        Me.PictureBox1.Refresh()

        If SlowDown = True Then
            Timer1.Interval += 1

            If Timer1.Interval = 100 Then
                Timer1.Stop()
            End If
        End If
(Dat staat dan dus in de timer.)

Dan hoef je bij de stopknop alleen nog maar Slowdown op true te zetten (en als je weer opnieuw draait weer op false zetten).

Het kan ook met threads, waardoor het er misschien iets beter uit zou kunnen zien, maar het is wel behoorlijk wat ingewikkelder.

MartinJM
 
het idee wat ik wil klopt grotendeels zo, maar hij stopt nu abrupt. Kan ik dat nog op één of andere manier een beetje langzaam laten uitfaden.
HEt is nu zo dat ik die 100 interval variabel laat kiezen vanuit een random en ook de angle steps komen vanuit een random generrator
 
Je moet ervoor zorgen dat de interval van de timer in het begin wel echt wat kleiner is dan de interval waarop hij zal stoppen.
Wat je eventueel ook kan doen is de angle steeds minder laten toenemen. Let er dan wel op dat het dan misschien handiger is om de angle als Double te hebben ipv een integer.
 
de start interval is nu 10. De max interval is 150 en minstens 100
Maar hoe kan ik de angle laten afnemen, heb het verschil tussen angle en max tijd. als hij op dat punt is (bijwijze van: angle = 15 en eindtijd is 130 dan moet hij starten met verminderen bij 115) moet hij beginnenn met angle - 1. Zodat hij dan na 15 ticks op angle=0 staat.
 
Hoi,

Je kan er bijvoorbeeld dit van maken:
Code:
Me.angle = (Me.angle + Me.AngleSpeed) Mod 360
En dan AngleSpeed als variable, die je op het juiste moment dan aanpast. Op het moment dat de AngleSpeed dan 0 is kan je ook de timer stoppen.

MartinJM
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan