Aus negativem wert positiv machen.
Übersicht BlitzBasic Beginners-Corner
mpreuBetreff: Aus negativem wert positiv machen. |
Di, Jul 02, 2013 21:04 Antworten mit Zitat |
|
---|---|---|
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 |
||
XeresModerator |
Di, Jul 02, 2013 21:07 Antworten mit Zitat |
|
---|---|---|
~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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
mpreu |
Di, Jul 02, 2013 21:07 Antworten mit Zitat |
|
---|---|---|
oh supi....
schnellste antwort ever |
||
RallimenSieger des 30-EUR-Wettbewerbs |
Di, Jul 02, 2013 21:09 Antworten mit Zitat |
|
---|---|---|
Vorzeichen umkehren mit
a= a* -1 |
||
[BB2D | BB3D | BB+]
|
mpreu |
Di, Jul 02, 2013 22:43 Antworten mit Zitat |
|
---|---|---|
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 |
||
RallimenSieger des 30-EUR-Wettbewerbs |
Di, Jul 02, 2013 22:47 Antworten mit Zitat |
|
---|---|---|
sowas
If posy < 0 then PosY = 0 |
||
[BB2D | BB3D | BB+]
|
mpreu |
Di, Jul 02, 2013 22:52 Antworten mit Zitat |
|
---|---|---|
ä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 |
Di, Jul 02, 2013 23:01 Antworten mit Zitat |
|
---|---|---|
1. ich denke, die sollen das selbe sein.
2. du musst einfach auf -5 anstatt auf 0 zurücksetzen. |
||
XeresModerator |
Di, Jul 02, 2013 23:05 Antworten mit Zitat |
|
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Silbersurfer |
Di, Jul 02, 2013 23:27 Antworten mit Zitat |
|
---|---|---|
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 |
Di, Jul 02, 2013 23:38 Antworten mit Zitat |
|
---|---|---|
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 |
Di, Jul 02, 2013 23:46 Antworten mit Zitat |
|
---|---|---|
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)) |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Silbersurfer |
Di, Jul 02, 2013 23:56 Antworten mit Zitat |
|
---|---|---|
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 |
||
mpreu |
Mi, Jul 03, 2013 0:25 Antworten mit Zitat |
|
---|---|---|
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 |
Mi, Jul 03, 2013 0:31 Antworten mit Zitat |
|
---|---|---|
äää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 |
Mi, Jul 03, 2013 0:41 Antworten mit Zitat |
|
---|---|---|
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 |
||
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group