verfolgung...

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

darth

Betreff: verfolgung...

BeitragSo, Aug 14, 2005 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
*DIESER TEIL IST ERLEDIGT*
hi, ich hab mal wieder ne frage:
wenn der char sich auf ne bestimmte distanz einem monster nähert, kommt das monster zu ihm und greifft an
(dmg_mon=10
...
leben=leben-dmg_mon)
das geht... aber der char ist schon tot bevor der selbst irgendwas tun kann...
ich habs mit waittimer() versucht (vor der hauptschleife n createtimer(60)) und delay 5000 (also alle 5sek)
aaaber: der waittimer wird ignoriert - delay hält das ganze prog an (also auch rendern etc... ich seh dann nur all 5sec n neues bild)...
gibts noch einen anderen weg?

*DAS IST DIE NEUE FRAGE*
[edit]
wollte keinen neuen thread aufmachen:
wenn ich mich dem monster auf eine gewisse distanz nähere, dann soll es zu mir kommen...
im mom mach ich es so:
moveentity monster,(entityx(man)-entityx(monster))/100,0,(entityz(man)-entityz(monster))/100
aber das ist auch nicht das gelbe vom ei...
mit aligntovector hab ichs auch versucht... aber der will auch nich so recht...
(=> ausserdem is da die OH falsch... wenn ich alles eingebe was da steht, kommt, ich habe zu viele parameter...)
mit moveentity monster,entitydistance(man,monster)/(entityz(man)-entityz(monster)),0,entitydistance(man,monster)/(entityx(man)-entityx(monster))
=> phytagoras...
kommt er manchmal, manchmal haut er ab... was er gerade will...
ausserdem richtet er sich nicht auf den man aus...
ich bräuchte irgendwas mit
aligntovector monster,entityx(man),0,entityz(man),? (welche achse?!?)
moveentity monster,zu_x_von_man,0,zu_z_von_man
kann mir da jemand helfen?!?

[edit2]:
hab grad gemerkt dass ich den armen phyt total verrechnet hab...
eigentlich ists ja: moveentity monster,sqr(distanz^2-(z_von_man-z_von_monster)^2)
aber auch das geht nich wirklich... (vllt. muss ich mit dem noch mehr rumprobieren? ich werds mal versuchen)
Diese Signatur ist leer.
  • Zuletzt bearbeitet von darth am So, Aug 14, 2005 21:19, insgesamt 4-mal bearbeitet
 

MegaTefyt

BeitragSo, Aug 14, 2005 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann mach halt, dass der Gegner nur alle x Millisekunden angreifen kann oder dass der Spieler nach einem Angriff für x Millisekunden nicht angreifbar ist.

Die zweite Methode ganz billig:
(Monster greift an)

BlitzBasic: [AUSKLAPPEN]

If SpielerAngreifbar Then
Leben = Leben - Dmg_Mon
SpielerAngreifbar = False
AngreifbarTimer = MilliSecs()
End If

If Not(SpielerAngreifbar) And MilliSecs() - AngreifbarTimer > 1000 Then
SpielerAngreifbar = True
End If


Also als ganz einfaches Beispiel. Wenn der Spieler angreifbar ist (SpielerAngreifbar = TRUE) dann wird ihm der Damage vom Leben abgezogen und das SpielerAngreifbar wird ausgeschaltet (= FALSE) und die aktuelle Millisekundenzeit wird gespeichert. Dann erfolgt jeden Durchlauf die Prüfung, ob der Spieler NICHT angreifbar ist und die Unverwundbarkeitszeit schon 1000 Millisekunden überschritten hat. Wenn dies so ist, dann wird der Spieler wieder angreifbar gemacht (nach einer Sekunde halt).

Ich hoffe mal, dass dieser Denkansatz dir bei deinem Problem weiterhilft.

darth

Betreff: ...

BeitragSo, Aug 14, 2005 12:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Embarassed ähm... danke =S warum bin ich da nich drauf gekommen?!?
WUAHAHA!!! es funzt... (musste es noch n bissl auf mein prog anpassen... aber der denkanstoss war genial!!!)
DANKE!!!
Diese Signatur ist leer.
 

MegaTefyt

BeitragMo, Aug 15, 2005 11:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, mal wieder als kleiner Denkansatz für eine Billiglösung:

BlitzBasic: [AUSKLAPPEN]

If (Abs(Distanz Spieler <-> Monster) < Bewegungs-Distanz) Then

If (PositionX(Spieler) < PositionX(Monster)) Then
MoveEntity Monster, -MonsterGeschwindigkeit, 0, 0
End If

If (PositionX(Spieler) > PositionX(Monster)) Then
MoveEntity Monster, MonsterGeschwindigkeit, 0, 0
End If

If (PositionZ(Spieler) < PositionZ(Monster)) Then
MoveEntity Monster, 0, 0, -MonsterGeschwindigkeit
End If

If (PositionZ(Spieler) > PositionZ(Monster)) Then
MoveEntity Monster, 0, 0, MonsterGeschwindigkeit
End If

End If


Von dieser simplen Lösung (müsste funktionieren) kannst du ja eine etwas "professionellere" Lösung ableiten. Allerdings würde dies hier nicht wirklich gut wirken. Ich würde dir empfehlen eine extra Funktion zu schreiben, die für die Bewegung des Monsters da ist, wie bei einem Strategiespiel. Da suchst du dir ja auch einen Punkt aus, zu dem z.B. eine Einheit laufen soll und nach einem Klick läuft sie dahin.

Sowas wie BewegeMonster (X, Z, Speed) oder so. Damit du dann folgendes machen könntest:

BlitzBasic: [AUSKLAPPEN]

If (Abs(Distanz Spieler <-> Monster) < Bewegungs-Distanz) Then

BewegeMonster (PositionX(Spieler), PositionZ(Spieler), MonsterGeschwindigkeit)

End If


Kannst dir ja dazu was einfallen lassen. Wink

darth

Betreff: thx

BeitragMo, Aug 15, 2005 12:58
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
danke, an sowas wie das 1. hab ich auch schon so etwa gedacht... (nur wollte es irgendwie nich funzen... jetzt weiss ich auch wieso ^^) da hab ich irgend ne komische formel reingepackt die dann nich gegangen ist... so ists natürlich viel einfacher!!!
die idee mit der funktion:
ich hab bisher noch keine "externe funktion" ich mag funktionen im allg nich sonderlich... obwohl das prog dann strukturierter wirken würde...
danke für die hilfe, der ansatz (oben) wird mir helfen!

[edit]: deine methode geht schon, aber da zuckt das monster hin und her, da die x/z unterschiede immer wieder anders sind, dann wirds halt zurück bewegt und so weiter... =S werds wohl weiter auf "meine weise" machen müssn... danke trotzdem
Diese Signatur ist leer.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group