2017-02-20 3 views
0

Hier ist der vollständige Code:Wie kann ich Formen ohne Jitter unabhängig voneinander bewegen?

GraphicsWindow.Clear() 
GraphicsWindow.CanResize = "false" 
GraphicsWindow.Height = Desktop.Height-200 
GraphicsWindow.Width = Desktop.Width-200 

scount = Math.GetRandomNumber(25) 
For s = 1 To scount 
    Shx[s] = Math.GetRandomNumber(GraphicsWindow.Width-100) 
    Shy[s] = Math.GetRandomNumber(GraphicsWindow.Height-100) 
    shsize[s] = Math.GetRandomNumber(50) 
    Sh[s] = Shapes.AddEllipse(shsize[s],shsize[s]) 
    Shapes.Move(Sh[s],Shx[s],Shy[s]) 
EndFor 

loop: 
For s = 1 to scount 
    op[s] = Math.GetRandomNumber(2) 
    If op[s] = 1 Then 
    vel[s] = .5 
    EndIf 
    If op[s] = 2 Then 
    vel[s] = -.5 
    EndIf 
    Shx[s] = Shx[s] + vel[s] 
    Shy[s] = Shy[s] + vel[s] 
    Shapes.Move(Sh[s],Shx[s],Shy[s]) 
EndFor 
Goto loop 

Meine Vermutung ist, das Problem hier ist:

op[s] = Math.GetRandomNumber(2) 
    If op[s] = 1 Then 
    vel[s] = .5 
    EndIf 
    If op[s] = 2 Then 
    vel[s] = -.5 
    EndIf 

Was tun in unabhängigen Richtungen ich tun müssen, um die Formen zu machen bewegen, ohne sie jittering?

Antwort

0

Eine andere Sache, die Sie tun könnten, ist Frames pro Sekunde zu tun. Lassen Sie alle Objekte die Mathematik machen und aktualisieren Sie sie dann. Dies wird ausgeführt, nachdem die ganze Mathematik getan wurde, so wie in der Regel seine 60 Frames pro Sekunde so 1/60, um die Anzahl der Sekunden pro Frame zu erhalten. Sie benötigen auch einen Timer, um die abgelaufene Zeit zu überprüfen, damit Sie dem Computer Zeit geben können, jede Form in der richtigen Zeit zu verschieben. Wenn Sie mehr Code benötigen, stelle ich Ihnen gerne einige zur Verfügung.

GraphicsWindow.Clear() 
GraphicsWindow.CanResize = "false" 
GraphicsWindow.Height = Desktop.Height-200 
GraphicsWindow.Width = Desktop.Width-200 

scount = Math.GetRandomNumber(25) 
For s = 1 To scount 
    Shx[s] = Math.GetRandomNumber(GraphicsWindow.Width-100) 
    Shy[s] = Math.GetRandomNumber(GraphicsWindow.Height-100) 
    shsize[s] = Math.GetRandomNumber(50) 
    Sh[s] = Shapes.AddEllipse(shsize[s],shsize[s]) 
    Shapes.Move(Sh[s],Shx[s],Shy[s]) 
    op[s] = Math.GetRandomNumber(2) 
EndFor 

loop: 
Time = Clock.ElapsedMilliseconds 
For s = 1 to scount 

    If op[s] = 1 Then 
    vel[s] = .5 
    EndIf 
    If op[s] = 2 Then 
    vel[s] = -.5 
    EndIf 
    Shx[s] = Shx[s] + vel[s] 
    Shy[s] = Shy[s] + vel[s] 
    Shapes.Move(Sh[s],Shx[s],Shy[s]) 
EndFor 
frames() 
Goto loop 

Sub frames 
    timeend = Clock.ElapsedMilliseconds 
    TextWindow.WriteLine((timeend - Time)/1000) 
    framelength = 60 
    Timeperframe = 1/framelength 
    while (((timeend - Time)/1000) < Timeperframe) 
    timeend = Clock.ElapsedMilliseconds 

    EndWhile 
    Time = Clock.ElapsedMilliseconds 

    endsub 
+0

wenn Sie möchten, Um die Geschwindigkeit unabhängig von Bildern pro Sekunde gleich zu halten, müssen Sie nur die Geschwindigkeit basierend auf den Bildern pro Sekunde bearbeiten. Nehmen wir an, Sie möchten immer 5 Pixel Bewegung pro Sekunde haben, unabhängig von Frames, Sie machen 5/Frames und das ist die Anzahl der pro Sekunde bewegten Pixel. Wenn Sie also 10 Bilder pro Sekunde haben, werden Sie 0,5 Pixel pro Bild bewegen und zu 5 Pixeln in dieser gesamten Sekunde hinzufügen. :-D hoffe das hilft. – Matthew

0

Ich habe:

op[s] = Math.GetRandomNumber(2) 
If op[s] = 1 Then 
vel[s] = .5 
EndIf 
If op[s] = 2 Then 
vel[s] = -.5 
EndIf 

in der Initialisierung Schleife, und die Formen Jitter nicht mehr. Meine Vermutung ist, dass die Variable "vel" jedesmal den Formen zugewiesen wurde, was den Jitter verursachte.

+0

das wahr ist, können Sie auch das, wenn ein Teil in der Hauptschleife getan haben könnte, aber das funktioniert Ich glaube, besser, was Sie tun, auf diese Weise Sie tun müssen, um die nicht Aussagen, wenn jedes Mal – Matthew

Verwandte Themen