Aus negativem wert positiv machen.

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

mpreu

Betreff: Aus negativem wert positiv machen.

BeitragDi, Jul 02, 2013 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Und zwar...

ich möchte eine bewegungsfunktion schreiben.
bewegt wird ein objekt auf der x achse.

nun möchte ich die bewegung einschränken indem ich die koordinaten abfrage.

wenn ich die bewegung nun mittel -1 (z.B.) durchführe und die position prüfe und gegen >= 0 prüfe, funktioniert das nicht wirklich.

wenn ich z.b. mit -5 die bewegung mache, bewegt es sich ganz schnell in den minusbereich.
und dann geht nix mehr

ich müsste also aus dem negativen wert -5 den ich an die bewegungsfunktion übergebe +5 machen, damit ich x auf >= 0 + 5 prüfen kann.

fazit: wie mache ich aus einer negativen zahl eine positive.
also vorzeichen ändern.

vllt. kann mir jemand da kurz helfen

Xeres

Moderator

BeitragDi, Jul 02, 2013 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~


Dir könnte abs helfen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

mpreu

BeitragDi, Jul 02, 2013 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
oh supi....
schnellste antwort ever

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, Jul 02, 2013 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Vorzeichen umkehren mit

a= a* -1
[BB2D | BB3D | BB+]
 

mpreu

BeitragDi, Jul 02, 2013 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke sehr...

Ich hab nochmal eine totale noob frage...hab vor jahren schonmal was in der art gemacht, aber irgendwie komm ich grad nicht drauf.

Ich möchte also in meinem fenster die bewegung des sprites einschränken.
Ich frage also die Koordinaten ab und wenn y <= 0 dann soll y = 0 bleiben bzw. einfach stehenbleiben.

Ich weiß, ist doof ausgedrückt.

Ich wurschtel grad in meinem Code rum aber irgendwie ist der wurm drin.
Wenn beim Move die werte zu groß sind, dann ruckelt das natürlich wenns auf 0 zurückspringt.

Die Lösung ist bestimmt total einfach.

Also ich will den Bereich 640x480 eingrenzen, sodass das sprite nur in diesem rahmen die möglichkeit hat sich zu bewegen.

mir würde y reichen, also 0 - 640
oder irgendwelche anderen werte.
Habs in einer funktion drin und so richtig will das nicht.

derzeit probiere ich grad das hier
Code: [AUSKLAPPEN]
 If posy-Abs(y) < 0 Then y = Abs(y)-posy


flackert aber auch, und ich hatte schon ganz andere konstrukte in den letzten 2-3 stunden

komm mir zwar grad blöd vor, aber vllt. weiß jemand rat

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, Jul 02, 2013 22:47
Antworten mit Zitat
Benutzer-Profile anzeigen
sowas

If posy < 0 then PosY = 0
[BB2D | BB3D | BB+]
 

mpreu

BeitragDi, Jul 02, 2013 22:52
Antworten mit Zitat
Benutzer-Profile anzeigen
ähm das posy und dein Posy sind das gleiche?
ich bewege mit moveentity und wenn posy im minusbereich ist, sagen wir mal wert -5, dann flackert es wenn ichs zurücksetze auf 0.
 

bjh

BeitragDi, Jul 02, 2013 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
1. ich denke, die sollen das selbe sein.

2. du musst einfach auf -5 anstatt auf 0 zurücksetzen.

Xeres

Moderator

BeitragDi, Jul 02, 2013 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest vielleicht immer dazu sagen, ob es sich um 2D oder 3D handelt (und was deine Variablen denn bedeuten) - das ist für uns nicht ganz offensichtlich.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Silbersurfer

BeitragDi, Jul 02, 2013 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
willst das sie Stehen bleiben oder deren bewegun umkehren ?

zb sowas in der art

Code: [AUSKLAPPEN]
speedx#=2 :speedy#=2
Repeat
   x#=x#+speedx#
   y#=y#+speedy#
   Rect x,y,50,50,1
   If x>640-50   Then speedx#=-Rnd(1,4)
   If x<0         Then speedx=Rnd(1,3)
   If y>480-50   Then speedy#=-Rnd(1,2)
   If y<0         Then speedy=Rnd(1,3)   
   Flip
   Cls
Until KeyHit(1)
-------------------------------------------------------
XP 2000+ 512DDR Radeon 9800 XL 340GB HD
Hompage : http://home.arcor.de/silbersurfer01/
Is Bob engine http://home.arcor.de/silbersur.../Isbob.zip
 

mpreu

BeitragDi, Jul 02, 2013 23:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Um 2D aber das spielt keine Rolle in diesem Moment.

Es geht ja nur um x und y bewegungen.

Ich möchte dass das Objekt sich in einem bestimmten Pixelbereich bewegen kann.

Also Cursortaste hoch/runter.
Begrenzung 0-480 (50pxx50px für die Größe des Objektes abziehen)

@Silbersurfer sowas in der Art.

und ich kann ja nicht gegen -5 prüfen.
Ich kann das Objekt ja auch auf keinem vielfachen von 5 positionieren, dann geht das ja nicht.
wenn das Objekt sich auf x 3 befindet und ich 5 abziehe, komm ich zu -3 und beim nächsten sprung bin ich drüber hinaus.wenn ich jetzt wieder zurücksetze dann ruckelt es ja wieder.

vielleicht sollte ich das ganze statt mit MoveEntity mit PositionEntity machen.
Da hätte ich globale Positionen und da gäbe es die Sprünge nicht.

DAK

BeitragDi, Jul 02, 2013 23:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Rallimens Antwort ist dazu das Beste:

Du möchtest ja das Objekt zwischen 0 und 480 beschränken.

Sagen wir, das Objekt rutscht in den negativen Bereich. In diesem Fall musst du es auf den nächsten Punkt der erlaubt ist, zurück setzen.
Dieser nächste Punkt ist, wenn die Position negativ ist, immer 0, egal ob die Position vorher bei -1, -5 oder -10000 war. Der Code ist also folgender:

(posY ist die Y-Koordinate des Objekts)
BlitzBasic: [AUSKLAPPEN]
If posY < 0 Then posY = 0


Das Gleiche gilt für die obere Grenze:
BlitzBasic: [AUSKLAPPEN]
If posY > 480 Then posY = 480


Und natürlich analog für die X-Achse.


Zum flackern:
(a) Verwendest du DoubleBuffering? Wenn nicht, dann hast du deinen Fehler.
(b) Ist deinen Code in der richtigen Reihenfolge? So gehört's:
BlitzBasic: [AUSKLAPPEN]
While (Not KeyHit(1))
Cls

;Positionsberechnungen usw
;Die Positionsüberprüfung von oben

;Die nächsten beiden Zeilen nur wenn du 3D verwendest:
UpdateWorld
RenderWorld

;Den Rest wieder sowohl in 3D als auch in 2D
Flip
Wend
Gewinner der 6. und der 68. BlitzCodeCompo
 

Silbersurfer

BeitragDi, Jul 02, 2013 23:56
Antworten mit Zitat
Benutzer-Profile anzeigen
man könnte auch voher prüfen ob x ins negative rutscht
zb if x-deiner schrittweite <0 dann x=0

Code: [AUSKLAPPEN]
if x-schrittweite<0 then x=0

dann bekommst du erst garnicht den -wert

also wenn x=3 ist und deine schrittweite 5 würde es -2 ergeben durch die abfrage oben ist dann dein
letzter schritt nicht mehr 5 sondern 3 und kein ruckeln Very Happy
 

mpreu

BeitragMi, Jul 03, 2013 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal eben ausm Kopf getippt.

Code: [AUSKLAPPEN]
Function LMoveSprite(ent, x, y)
posx = EntityX(ent)
posy = EntityY(ent)
   
   
       If posy-y < 0
         posy = 0
         posynew = posy
       EndIf
       If posy >=0
         posynew = posy + y
        EndIf
                 PositionEntity(ent, posx, posynew)
End Function


ruckelt aber dennoch....ich komm nich drauf

Eingeproggt

BeitragMi, Jul 03, 2013 0:31
Antworten mit Zitat
Benutzer-Profile anzeigen
ääähhh...
Zitat:
Um 2D aber das spielt keine Rolle in diesem Moment.

Code: [AUSKLAPPEN]
PositionEntity(ent, posx, posynew)


Irgendwas hast du da missverstanden? Oder tippe nicht "mal so ausn Kopf" sondern schreibs vollständig...

mfG, Christoph
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

mpreu

BeitragMi, Jul 03, 2013 0:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Habs hinbekommen.
Hatte nur einmal das y for den nächsten schritt vergessen vorauszuberechnen

beim 2. if...endif musste einmal posy+y hin....jetzt klappts wie gewünscht

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group