Probleme mit Modulo

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

McThyzer

Betreff: Probleme mit Modulo

BeitragFr, Apr 08, 2011 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich möchte eine "Weltkugel" machen, also wenn man links angekommen ist, soll man rechts wieder rein kommen.

Das hab ich schon mehrmals gemacht, jedoch habe ich momentan das problem, dass der Wert von -3233 zu 3232 springen soll und von 3233 zu -3232.

Modulo geht aber nur von 0 bis WertX.

Ich hab versucht es so zu umgehen:
(CenterX - width/2) sowie (CenterY - height/2) sind die Werte die "springen" müssen.
Aber das Programm springt hin und her wie es lustig ist. :S

Weiß jemand wie ich das vernünftig mache?
Mit +6464 und nachher -3232 wieder abziehen hab ich es auch nicht hinbekommen.

Code: [AUSKLAPPEN]
   Local blncrX = 1
   Local blncrY = 1
   If (CenterX - width/2) < 0 Then
      CenterX = Abs(CenterX)
      blncrX = -1
   EndIf
   If (CenterY - height/2) < 0 Then
      CenterY = Abs(CenterY)
      blncrY = -1   
   EndIf
   
   
   CenterX = (((CenterX - width/2 + 3232) Mod 3232) + width/2) * blncrX
   CenterY = (((CenterY - height/2 + 3232) Mod 3232) + height/2) * blncrY

Thunder

BeitragFr, Apr 08, 2011 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn eine Formel mit normalen Operatoren zu kompliziert ist oder man einem gerade keine einfache einfällt sind meistens Vergleichsoperatoren die beste (Übergangs-)Lösung:
Code: [AUSKLAPPEN]
i=i-6464*(i>3232)+6464*(i<-3232)


Aber ich hätte wahrscheinlich eine Variable durch den Wertebereich 0 - 6463 begrenzen:
Code: [AUSKLAPPEN]
i=i Mod 6464

und immer wenn ich den Wert brauche, (i-3232) angegeben.

Je nachdem, ob jetzt 3232 auf -3232 oder -3231 springen soll, müsstest du das anpassen.

mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

BlitzMoritz

BeitragFr, Apr 08, 2011 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, dies hier macht das, was du willst: Läuft zweimal von -29 bis 17. Mit deinen eigenen Werten ist es nicht anders. Vereinfache deine Terme einfach in kleine Schritte und verwurstel nicht zuviel auf einmal.
BlitzMax: [AUSKLAPPEN]
Const i_Minimum% = -29	 'tatsaechliches negatives Minimum
Const i_Maximum% = 18 'Eins mehr als das positive Maximum
Local i_Modulo% = i_Maximum - i_Minimum 'quasi der Betrag, der durchlaufen wird
Local i_positiv% 'die fuer mod benutze Laufvariable
Local i% = i_positiv + i_Minimum 'die Differenz bzw. Umrechnung in die gewuenschte Groesse

Local count% 'nur zum Zaehlen der Schleife, damit sie nach zwei Durchgaengen abgebrochen werden kann
Repeat
Print i
i_positiv = (i_positiv + 1) Mod i_Modulo
i = i_positiv + i_Minimum
count:+1
Until count = i_Modulo + i_Modulo

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group