objekt Bewegung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Flausch96

Betreff: objekt Bewegung

BeitragSa, Jul 02, 2011 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute, ich habe ein Problem. Ich möchte ein das sich mein Objekt hin und her bewegt während ich die Linke Maustaste Drücke. Aber iwi tut es das nicht Crying or Very sad . Hier der Code:


BlitzBasic: [AUSKLAPPEN]
If MouseDown(1) = 1 MoveEntity Objekt,0,0,5 If MilliSecs()>=ms+1000 MoveEntity Objekt,0,0,-5  

Xeres

Moderator

BeitragSa, Jul 02, 2011 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicht alles in eine Zeile quetschen und nicht auf Then verzichten.
Hin und her bewegen kann auch nicht stattfinden, weil die Bewegungen in der Summe 0 ergeben - benutzte eine Steuervariable um die Richtung an zu geben.
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)

Flausch96

BeitragSa, Jul 02, 2011 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
was meinst du mit Zitat:
benutzte eine Steuervariable um die Richtung an zu geben.
bzw. was ist eine Steuervariable.

Xeres

Moderator

BeitragSa, Jul 02, 2011 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Du nimmst eine Variable Richtung - oder was dir halt logisch erscheint - und Steuerst damit die Objekt Bewegung:
BlitzBasic: [AUSKLAPPEN]
If Richtung Then
MoveEntity Objekt,0,0,5
Else
MoveEntity Objekt,0,0,-5
EndIf

Oder du nimmst direkt die Geschwindigkeit:
BlitzBasic: [AUSKLAPPEN]
MoveEntity Objekt,0,0,z_speed
;[...]
z_speed = -z_speed ;* Von Positiv nach negativ und umgekehrt umschalten, Z.B. in verbindung mit dem Millisecs Timer
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)
  • Zuletzt bearbeitet von Xeres am Sa, Jul 02, 2011 19:30, insgesamt einmal bearbeitet

Flausch96

BeitragSa, Jul 02, 2011 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Könntes du mir vll. einfach den Code zeige, wie du das machen würdes. Ich kapier das nicht so ganz Embarassed Embarassed

Xeres

Moderator

BeitragSa, Jul 02, 2011 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Probier's selbst! Wenn du nur meinen Code überfliegst, bringt dir das relativ wenig.
Wenn's nicht klappt, bekommst du immer noch Ratschläge.
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)

Flausch96

BeitragSa, Jul 02, 2011 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, Ich werds mal probieren, aber könntest du mir diese Zeile Genauer erklären ?

BlitzBasic: [AUSKLAPPEN]
z_speed = -_speed ;* Von Positiv nach negativ und umgekehrt umschalten, Z.B. in verbindung mit dem Millisecs Timer

Xeres

Moderator

BeitragSa, Jul 02, 2011 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein Negatives Vorzeichen ist das gleiche wie mit -1 zu multiplizieren, du änderst das Vorzeichen.
Umschalten tust du, wenn der Timer "tickt":
BlitzBasic: [AUSKLAPPEN]
Repeat

ms=MilliSecs()

If Zeit+2500 < ms Then
Zeit=ms
z_speed = -z_speed
EndIf

Until [...]


Edit: Unterschlagenes z eingefügt.
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)
  • Zuletzt bearbeitet von Xeres am Sa, Jul 02, 2011 19:31, insgesamt 2-mal bearbeitet

Flausch96

BeitragSa, Jul 02, 2011 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry, aber ich versteh nich so ganz was du meinst Crying or Very sad Crying or Very sad Crying or Very sad

Xeres

Moderator

BeitragSa, Jul 02, 2011 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Wo liegt denn das Problem genau?
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)

Flausch96

BeitragSa, Jul 02, 2011 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Diese Zeilen in deinem Letztem Beitrag:

BlitzBasic: [AUSKLAPPEN]
	If Zeit+2500 < ms Then   
Zeit=ms

Xeres

Moderator

BeitragSa, Jul 02, 2011 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist genau der selbe Code von vorher. Nimm Stift & Papier und schreib' dir auf was passiert, so lässt es sich immer leichter verdeutlichen, was passiert.
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)

Flausch96

BeitragSa, Jul 02, 2011 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich werde heute abend an einem Code Rumbasteln und morgen meinen Code posten.

Flausch96

BeitragSo, Jul 03, 2011 11:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, ich habe jetzt einen Code erstellt. Klappt aber iwi immer nocht nich.


Außerhalb der Hauptschleife:
BlitzBasic: [AUSKLAPPEN]
Function ObjektBewegen()
MoveEntity(Objekt,0,0,5)
End Function

Function ObjektBewegen2()
MoveEntity(Objekt,0,0,-5
End Function


Inerhalb der Hauptschleife:

BlitzBasic: [AUSKLAPPEN]
If MouseDown(1) Then ObjekBewegen()
If MilliSecs()>=ms+1500 Then ObjektBewegung2()
If MilliSecs()>=ms+3000 Then ObjektBewegung() Ms=MilliSecs()

Xeres

Moderator

BeitragSo, Jul 03, 2011 11:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du eine flüssige Bewegung haben möchtest, ist das nicht sinnvoll, da der Code nur alle 3 Sekunden ausgeführt wird. Genauso brauchst du keine zwei Timer, du müsstest bloß eine Variable umschalten, die angibt in welche Richtung sich das Objekt später bewegt. Und die Mousedown Bedingung gleicht wieder die genau die Bewegung aus...
Arrow Der Timer schaltet bloss eine Variable um
Arrow MoveEntity wird immer ausgeführt...
Arrow ...solange die Maustaste gedrückt wird.

BlitzBasic: [AUSKLAPPEN]
Graphics3D(800,600,32,2)
SetBuffer(BackBuffer())
Local FrameTimer = CreateTimer(60)

Local cam = CreateCamera()
Local obj = CreateCube()
PositionEntity(obj, 0,0,5)

Local ms, Zeit, y_speed#=0.02

Repeat

ms=MilliSecs()

If MouseDown(1) Then

If Zeit+2000 < ms Then
Zeit = ms
y_speed = -y_speed
EndIf

MoveEntity(obj, 0, y_speed, 0)
EndIf

RenderWorld()
Text(10,10,"y_speed: "+y_speed)
Text(10,30,"Timer tickt in: "+(Zeit+2000 - ms))
Flip(0)
WaitTimer(FrameTimer)
Until KeyHit(1)
End


Die Anfangsposition wird nicht zwangsläufig wieder erreicht, wenn man mittendrin die Maustaste los lässt...
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)

Hubsi

BeitragSo, Jul 03, 2011 11:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Funktionen ObjektBewegung() bzw. ObjektBewegung2() hast Du nicht gepostet und die Einrückung ist etwas ungewöhnlich Very Happy

Grundsätzlich kannst Du dir aber eine Function schonmal sparen wenn Du Parameter benutzt. Als Beispiel:
BlitzBasic: [AUSKLAPPEN]
If MilliSecs()>timer+1500 Then
timer=MilliSecs() ; Fehlt in Deinem geposteten Code einmal wenn Du genau hinschaust
If way=-5 Then way=5 Else way=-5
Beweg_das_Ding(way)



; Hauptschleife Ende


; Die Functions
Function Beweg_das_Ding(wohin)
MoveEntity objekt,0,0,wohin
End Function


Im jetzigen Stadium ist es noch recht sinnlos das überhaupt in eine Function zu packen (nur eine Aktion), aber das Prinzip ist damit erklärt, denke ich? Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Flausch96

BeitragSo, Jul 03, 2011 12:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank Leute, habt mir wirklich sehr geholfen. Habs jezt Kapiert was ich die ganze Zeit Falsch gemacht hab Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group