Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.05.2004, 16:41

zeitbeschränkung?

hi

ich habe mir mal die breakanoiderweiterung vorgenommen und klappt bisher auch wunderbar...allerdings hab ich das problem die extras nach einer bestimmten zeit zu beenden...ich hab hier meinetwegen meinen codeabschnitt:



if(m_aExtra[0].m_bActive == TRUE)
{
m_vPaddleVel.x += g_pfButtons[TB_KEY_RIGHT] * 100.0f * fTime;
m_vPaddleVel.x -= g_pfButtons[TB_KEY_LEFT] * 100.0f * fTime;
}
else
{
m_vPaddleVel.x += g_pfButtons[TB_KEY_RIGHT] * 50.0f * fTime;
m_vPaddleVel.x -= g_pfButtons[TB_KEY_LEFT] * 50.0f * fTime;
}

nur wie mache ich dass das extra nach 10sec aufhört zu wirken???

ich glaube nämlich ich kann es wenn überhaupt nur auf einem sehr umständlichen weg mit zu vielen variablen aber das müsste auch einfacher gehn

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

21.05.2004, 17:00

Du brauchst ne Countdown var, die du jeden durchgang um fTime verringerst.
ersetze doch alle bextra durch fextra und so lange diese größer 0 ist, ist es aktiv....

Stefan

Alter Hase

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

3

21.05.2004, 20:30

hi,

ich machs immer so:

float Wart; // Veriable die die 10sekunden stoppen soll

Sobald du die Extras erzeugst, gibt du der Veribale diesen Wert:

Wart = g_fTime; // ist in Breakanoid bereits eingebaut, erzöht sich pro Frame immer um die vergangene Zeit!
Wart += 10.0f; // für die 10 Sekunden

So und jetzt noch in der Hauptschleife oder wo das auch immer bei dir ist eine if-Abfrage:

if(g_pFocus->g_fTime)


Und fertig, glaube das wären nicht zu viele Veribalen!



cya,
Stefan

4

29.05.2004, 09:14

es sind ein paar neue peorbleme aufgetaucht und ich werde euch diese jetzt mal schildern :-P

1) das mit der zeit bekomm ich immernoch nicht hin:

"Sobald du die Extras erzeugst, gibt du der Veribale diesen Wert:

Wart = g_fTime;" heißt ist jetzt meinetwegen 30(sec)
"Wart += 10.0f; " ist damit bei 40

"So und jetzt noch in der Hauptschleife oder wo das auch immer bei dir ist eine if-Abfrage:

"if(g_pFocus->g_fTime)" diese if-Abfrage wird immer erfolgreich beendet da es übersetzt heißt if(g_pFocus->g_fTime existiert dann...)

2) ich habe versucht einen "magic ball" zu programmieren. er bewirkt dass man das paddle nicht mehr bewegen kann und die x-flugrichtung des Balls mit den pfeiltasten gesteuert werden kann aber

aber m_pBall->m_vVelocity.x = g_pfButtons[VK_RIGHT] * 100.0f
m_pBall->m_vVelocity.x = g_pfButtons[VK_RIGHT] * 100.0f

funzt net...immer hin bewegt sich das paddle nicht mehr :D

3) ein weiteres extra ist der "auto-ball" der bewirkt dass das paddle von selbst gesteuert wird und immer auf ballhöhe ist also:

m_vPaddlePos.x = m_pBall->m_vPosition.x

aber nein...da tut sich nix...stattdessen kackt das spiel ab O_o

hoffe ihr könnt mir helfen sonst wirds wohl nix ;(

Stefan

Alter Hase

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

5

29.05.2004, 10:32

Zitat von »"Sk!p"«

1) das mit der zeit bekomm ich immernoch nicht hin:

"Sobald du die Extras erzeugst, gibt du der Veribale diesen Wert:

Wart = g_fTime;" heißt ist jetzt meinetwegen 30(sec)
"Wart += 10.0f; " ist damit bei 40

"So und jetzt noch in der Hauptschleife oder wo das auch immer bei dir ist eine if-Abfrage:

"if(g_pFocus->g_fTime)" diese if-Abfrage wird immer erfolgreich beendet da es übersetzt heißt if(g_pFocus->g_fTime existiert dann...)
(


Sorry, hab da wohl eine Veriable vergessen, es sollte so heißen:

Quellcode

1
if(Wart < g_pFocus->g_fTime)


So jetzt sollte es funktionieren!
---
2) hm, wie bewegt sich den der Ball, wenn man auf die Pfeiltasten drückt? In deinem Beispiel würde er nur in eine Richtung fliegen bzw. sich gar nicht ändern, du verwendest zweimal VK_RIGHT, ausserdem würde ich das so schreiben:

Quellcode

1
2
 m_pBall->m_vVelocity.x -= g_pfButtons[VK_LEFT] * 100.0f 
m_pBall->m_vVelocity.x += g_pfButtons[VK_RIGHT] * 100.0f


Also vor dem = ein + bzw. ein - schreiben, sonst wird er sich bestimmt nicht bewegen! Sollte also so auch funktionieren:)
Edit: Sehe gerade das die Veriable Velocity heißt, verwende einfach mal die Veriable der Position des Balls:)


3) so wäre es schon richtig, wenn du die Zeile weg lässt, stürtzt es dann auch noch ab?



cya,
Stefan

CuTeX0r

Treue Seele

Beiträge: 174

Wohnort: Deutschland

  • Private Nachricht senden

6

29.05.2004, 10:41

also um ne zeitbeschränkung zu machen würd ich halt wie in galactica vorgehen:

float WieLang = 10.0f;//10 sec solls dauern

dann in der move funktion :

WieLang -= fTime;// vergangene zeit seit dem letzten frame abziehen
if(WieLang<= 0.0f)
{
// abgelaufen!
}

zu den andern sachen kann man so wenig sagen denk ich, müsste eigentl. korrekt sein.. schonmal debugged? weil nur wegen der anweisung m_vPaddlePos.x = m_pBall->m_vPosition.x dürfte nen programm eigentl nich abstürzen..

/ edit.. zu punkt 2 stimmt das nat. was stefan gesagt hat, hups.. naja, ist noch so früh *gg* :angel: grml hat er shcon wieder eher geposted als ich ^^

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

29.05.2004, 12:21

Das war genau das, was ich mit meinem Post sagen wolte....

8

29.05.2004, 13:21

ja sry diesmal wars mein fehler

1) das mit der zeit müsste nu klappen

2) ich hab das so gehabt

Quellcode

1
2
m_pBall->m_vVelocity.x -= g_pfButtons[VK_LEFT] * 100.0f 
m_pBall->m_vVelocity.x += g_pfButtons[VK_RIGHT] * 100.0f


allerdings fliegt der ball unbeirrt in seiner ursprünglichen flugrichtung

3) wenn ich die zeile weglasse läuft es natürlich weil dann is der anweisungsblock des extras ja leer

und debugt hab ich auch schon da gibt er mir an das der fehler halt in der zeile liegt...ich hab irgendwie das gefühl er kennt bei m_pBall->m_vPosition.X das x halt net :)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

29.05.2004, 14:43

Hmm der tbVector3 besteht aus ner union: einmal x,y,z einmal u,v,w einmal c[3] und einmal vD3DVector(ein D3DVECTOR). Eins davon muss es sein.

10

29.05.2004, 17:57

ja x aber das funzt irgendwie net O_o

Werbeanzeige