Spieler in bestimmte Richtung Drehen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Sephka

Betreff: Spieler in bestimmte Richtung Drehen

BeitragFr, Nov 05, 2010 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,ich sitzt grad an einem 2D shooter.
Da ich mich nicht so auskenne mit Winkeln und sinus,cosinus..................
Sitze ich vor folgendem Problem:
Ich möchte das der Feind in Richtung des Spielers Dreht und auf ihn zu geht.
Wie brechne ich wohin er sich drehn muss?
Mein Freund und Helfer:
Win7 Home Premium SP1
AMD Athlon II X4 645 3.1GHZ
8GB Ram
64bit
  • Zuletzt bearbeitet von Sephka am Fr, Nov 05, 2010 18:03, insgesamt einmal bearbeitet

Tennisball

BeitragFr, Nov 05, 2010 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Sephka,

Zur Winkelberechnung gibt es den Befehl Atan2

Kleines Beispiel:

BlitzBasic: [AUSKLAPPEN]
GegnerWinkel = ATan2(SpielerY-GegnerY,SpielerX-GegnerX)
GegnerX = GegnerX - Cos(GegnerWinkel) * GegnerSpeed
GegnerY = GegnerY + Sin(GegnerWinkel) * GegnerSpeed


mfg,
Tennisball

Sephka

BeitragFr, Nov 05, 2010 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok jetzt kommt aber
'Variable must ba a type'
Ich hab die Datei Included.
Code: [AUSKLAPPEN]
Function B_ILL()
If Sqr((SP_X- Feind\F_X)^2 + (Sp_Y-Feind\F_Y)^2)<50 Then
Feind\A = ATan2(SP_Y-Feind\F_Y,Sp_X-Feind\F_X)
Feind\F_X = Feind\F_A - Cos(Feind\A) * Feind\Speed
Feind\F_Y= Feind\F_Y + Sin(Feind\A) * Feind\Speed
End If
End Function
Mein Freund und Helfer:
Win7 Home Premium SP1
AMD Athlon II X4 645 3.1GHZ
8GB Ram
64bit

Tennisball

BeitragFr, Nov 05, 2010 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich weiß zwar nicht wie dein Type aussieht, aber das hier kommt mir komisch vor:

Sephka hat Folgendes geschrieben:
Feind\F_X = Feind\F_A - Cos(Feind\A) * Feind\Speed
Feind\F_Y= Feind\F_Y + Sin(Feind\A) * Feind\Speed


müsste das da nicht heißen Feind\F_X ? Wink

Sephka

BeitragFr, Nov 05, 2010 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne war zwar ein BUg aber hat nichs gemacht.
Code: [AUSKLAPPEN]
Type TFeind
  Field F_X,F_Y,F_A
  Field LIFE
  Field SPEED
  Field SKIN
  Field Typ$
  Field F_W_ID

  Field W_RANGE
  Field W_RATE
  Field W_MAGAZIN
  Field W_LEFT

 End Type
Mein Freund und Helfer:
Win7 Home Premium SP1
AMD Athlon II X4 645 3.1GHZ
8GB Ram
64bit

Tennisball

BeitragFr, Nov 05, 2010 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann ist's eben dieses Feind\A, das dein Type nicht besitzt

Sephka

BeitragFr, Nov 05, 2010 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Man bin ich blind,Danke!!!!!!!
EDIT:Klappt immer noch nicht....

Function B_ILL()
If Sqr((SP_X- Feind\F_X)^2 + (Sp_Y-Feind\F_Y)^2)<50 Then
Feind\F_A = ATan2(SP_Y-Feind\F_Y,Sp_X-Feind\F_X)
Feind\F_X = Feind\F_X - Cos(Feind\F_A) * Feind\Speed
Feind\F_Y= Feind\F_Y + Sin(Feind\F_A) * Feind\Speed
End If
End Function
Mein Freund und Helfer:
Win7 Home Premium SP1
AMD Athlon II X4 645 3.1GHZ
8GB Ram
64bit

Xeres

Moderator

BeitragFr, Nov 05, 2010 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Alternative IDE IDEal im Strict-Modus hilft solche Fehler zu vermeiden; alle nicht deklarierten Variablen werden rot hervorgehoben.
Variablen Lokal oder Global deklariert?
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)

Tennisball

BeitragFr, Nov 05, 2010 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Was genau klappt denn bitteschön nicht?

Edit:
Ich glaube bei deiner Pythagorasanwendung wolltest du wahrscheinlich >50 und nicht <50 schreiben.
  • Zuletzt bearbeitet von Tennisball am Fr, Nov 05, 2010 18:38, insgesamt einmal bearbeitet

Sephka

BeitragFr, Nov 05, 2010 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Alle sind Rot...
Mein Freund und Helfer:
Win7 Home Premium SP1
AMD Athlon II X4 645 3.1GHZ
8GB Ram
64bit

Xeres

Moderator

BeitragFr, Nov 05, 2010 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst die Variablen entweder an die Funktion übergeben oder Global machen. Ersteres ist empfohlen.
Arrow Function
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)

Sephka

BeitragFr, Nov 05, 2010 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
1.Es geht nichtmal wenndie Funktion Nicht includet ist
2.Kanne in Type global sein....?
3.Der ganze Code
Code: [AUSKLAPPEN]
;GTA by Jonas Hachmeister alias Sephka...

 Global gfx_w=1024;1280
 Global gfx_h=768;1024
Graphics gfx_w,gfx_h,16,2

SeedRnd MilliSecs()

;GLOBALS
 Global GRAD#,Angle#,speed#
 Global S_Timer#=0,Sshoot,WID,SID,WPic
 Global W1Left,W2Left,S1LEFT,S2LEFT,SLEFT,WLEFT

;BILDER
 punch = LoadImage("GFX\Punch.png")

;SOUNDS
 ZDeath = LoadSound("SFX\E1Kill.wav")
 Reload = LoadSound("SFX\REload.wav")

;ARRAY
 Dim WAFFE$ (0,7)
 Dim Spieler(359)
 Dim Spieler0(359)
 Dim spieler1(359)
 Dim spieler2(359)
 Dim W0$(0,7)
 Dim W1$(0,7)
 Dim W2$(0,7)
 Dim feind0(359)
;FONT
 font = LoadFont("Font\Pricedown.ttf",20)       
 font1 = LoadFont("Arial",14)
;SPIELER
 Global SP_X#=400,SP_Y#=300,SP_LIFE,SP_SPEED,SP_W_ID
 Global SP_W_RANGE,SP_W_RATE,SP_W_MAGAZIN,SP_W_LEFT
 Const Grafk_rotate = 5

  ;GRAFIK ERSTELLEN
TFormFilter 0

Spieler0(0)=LoadImage("GFX\P0.png")
MidHandle Spieler0(0)
For Angle#=0 To 359
Spieler0(Angle)=CopyImage(Spieler0(0))
MaskImage Spieler0(Angle),255,255,255
RotateImage Spieler0(Angle),Angle
Next


;SPIELER MIT PISTOLE


spieler1(0)=LoadImage("GFX\P1.png")
MidHandle spieler1(0)
For Angle#=0 To 359
spieler1(Angle)=CopyImage(spieler1(0))
MaskImage spieler1(Angle),255,255,255
RotateImage spieler1(Angle),Angle
Next
;SPIELER MIT PISTOLE

spieler2(0)=LoadImage("GFX\P2.png")
MidHandle spieler2(0)
For Angle#=0 To 359
spieler2(Angle)=CopyImage(spieler2(0))
MaskImage spieler2(Angle),255,255,255
RotateImage spieler2(Angle),Angle
Next



;FEINDE
Type TFeind
  Field F_X,F_Y,F_A
  Field LIFE
  Field SPEED
  Field SKIN
  Field Typ$
  Field F_W_ID

  Field W_RANGE
  Field W_RATE
  Field W_MAGAZIN
  Field W_LEFT

 End Type

feind0(0)=LoadImage("GFX\E1.png")
MidHandle feind0(0)
For Angle#=0 To 359
feind0(Angle)=CopyImage(feind0(0))
MaskImage feind0(Angle),255,255,255
RotateImage feind0(Angle),Angle
Next


;PATRONEN
BPatrone = LoadImage("GFX\Patrone.png")

Type TPATRONE
Field X#,Y#,A#,PX,PY
Field SPEED#
Field DAMAGE#
Field RANGE#
End Type

;Waffen
file=ReadFile("DATA\W0.dat")
For x=0 To 7
W0$(0,x) = ReadLine$(file)
Next
CloseFile file


file=ReadFile("DATA\W1.dat")
For x=0 To 7
W1$(0,x) = ReadLine$(file)
Next
CloseFile file
S1LEFT = W1(0,5):W1Left = 5
file=ReadFile("DATA\W2.dat")
For x=0 To 7
W2$(0,x) = ReadLine$(file)
Next
CloseFile file
S2LEFT = W2(0,5):W2Left = 5

ChangeWeapon("W0")
CreateEnemy(1,0,"ill")
SetBuffer BackBuffer()

;###################################

;INCLUDE
;Include "Behaivor\Ill.bb"

Repeat


;TASTEN ABFRAGEN
If MouseHit(1) Then CreateEnemy(1,0,"ill")
 If KeyDown(57) And S_Timer=0 And WAFFE(0,7)><0 And SLEFT>0 Then ;SCHUSS[LEERTASTE]
  SLEFT = SLEFT - 1
  Patrone.TPatrone = New TPATRONE
  Patrone\SPEED = WAFFE(0,6)
  Patrone\x# = SP_X# + Cos(Angle) * patrone\speed#
  Patrone\y# = SP_Y# + Sin(Angle) * patrone\speed#
  Patrone\A# = Angle 
  Patrone\Damage = WAFFE(0,1)
  Patrone\px = SP_X:Patrone\Py = SP_Y
WKadenz = WAFFE(0,3)
 S_Timer# = MilliSecs()+WKadenz
  schn = PlaySound(Sshoot) 
Else If KeyDown(57) And S_Timer=0 And WAFFE(0,7)=0
schn = PlaySound(Sshoot)
WKadenz = WAFFE(0,3)
WDamage = WAFFE(0,1)
WRANGE = WAFFE(0,4)
 S_Timer# = MilliSecs()+WKadenz
For Feind.TFeind = Each TFeind
If Sqr((SP_X-Feind\F_X)^2 + (SP_Y-Feind\F_Y)^2)<=WRANGE Then Feind\LIFE = Feind\Life - WDamage:Color 255,255,255:Rect 0,0,100,100,1

Next
;DrawImage Punch,SP_x# + Cos(angle),SP_y# + Sin(angle)*speed
 End If
If KeyDown(203) Then Angle = Angle - 3;DREHEN[<-]
If KeyDown(205) Then Angle = Angle + 3;DREHEN[->]
If KeyDown(200) Then;VORNE[HOCH]
 If speed < 0 speed = 0
  speed# = speed# + 0.05
 ElseIf KeyDown(208) Then;RÜCKWÄRTS[PFEIL UNTEN]
  If speed >  0 speed = 0
   speed# = speed# - 0.025
  Else
   speed = 0
 End If

;##WAFFE WECHSELN##
If KeyHit(3) Then ChangeWeapon("W1")
If KeyHit(4) Then ChangeWeapon("W2")
If KeyHit(2) Then ChangeWeapon("W0")
;############################
If Angle > 359 Then Angle = 0
If Angle < 0 Then Angle = 359
Wweight# = WAFFE(0,2):Wweight = Wweight/2
If speed# > 2-Wweight Then speed# = 2-Wweight
If speed# < -2+Wweight Then speed# = -2+Wweight

SP_X# = SP_X# + Cos(Angle) * speed#
SP_Y# = SP_Y# + Sin(Angle) * speed#

If SP_X < 1 Then SP_X = 1
If SP_X >gfx_w  Then SP_X = gfx_w
If SP_Y < 1 Then SP_Y = 1
If SP_Y > gfx_h Then SP_Y = gfx_h

DrawImage Spieler(Angle),SP_X,SP_Y;##Spieler Zeichnen##
;WAFFE CHECKEN

If SLEFT=0 And WLEFT >0 Then SLEFT = WAFFE(0,5):WLEFT = WLEFT-1:Rchn = PlaySound(Reload):S_Timer = MilliSecs() + 1000

;FEINDE ZEICHNEN USW...
For Feind.Tfeind = Each TFeind
B_ILL()
If Feind\Skin = 0 Then DrawImage feind0(Feind\F_A),Feind\F_X,Feind\F_Y
If Feind\Life<=0 Then
If Feind\Skin = 0 Then Dchn = PlaySound(ZDeath)     
 Delete Feind.TFeind
End If
 Next

;##PATRONEN DURCHGEHEN ZEICHNEN\LÖSCHEN...##
  For PATRONE = Each TPATRONE
   XD=Patrone\x-Patrone\px
   YD=Patrone\y-Patrone\py
   Abstand = Sqr(XD^2 + YD^2)
   WRANGE = WAFFE(0,4)


    If Abstand>WRANGE Then Delete Patrone.TPATRONE:Exit 
     Patrone\x# = Patrone\x# + Cos(Patrone\a) * patrone\speed#
     Patrone\y# = Patrone\y# + Sin(Patrone\a) * patrone\speed#
  Color 100,100,100
 DrawImage BPatrone,PATRONE\x,PATRONE\y
 For Feind = Each TFeind
  If ImagesOverlap(BPatrone,Patrone\x,Patrone\y,feind0(0),Feind\F_X,Feind\F_Y)=1 Then
Feind\LIFE=Feind\LIFE-Patrone\Damage
Delete Patrone.TPatrone:Exit
End If
 Next
Next

;##STATUS ZEICHNEN##
SetFont font1
If WAFFE(0,7) >< 0 Then Text 1,1,SLEFT+"/"+WLEFT 


DrawImage WPic,0,gfx_h - 49
SetFont font
Color 255,255,255
Text 55,gfx_h - 49,WAFFE(0,0)
Flip
Cls
If S_Timer < MilliSecs() Then S_Timer = 0
Until KeyHit(1)

Function ChangeWeapon(WID$)
;WAFFEN
If WAFFE(0,7) = 1 Then S1LEFT=SLEFT:W1Left=WLEFT
If WAFFE(0,7) = 2 Then S2LEFT=SLEFT:W2Left=WLEFT

  For x=0 To 7
If WID$="W0" Then WAFFE(0,x)=W0(0,x)
If WID$="W1" Then WAFFE(0,x)=W1(0,x):SLEFT=S1LEFT:WLEFT=W1Left
If WID$="W2" Then WAFFE(0,x)=W2(0,x):SLEFT=S2LEFT:WLEFT=W2Left

  Next
If WID$="W0" Then ChangeSkin("S0")
If WID$="W1" Then ChangeSkin("S1")
If WID$="W2" Then ChangeSkin("S2")

Sshoot = LoadSound("SFX\WAFFE_"+WAFFE(0,7)+".wav")
WPic = LoadImage("GFX\W"+WAFFE(0,7)+".png")
MaskImage WPic,255,0,0
End Function


Function ChangeSkin(SID$)

 For x=0 To 359
If SID$ = "S0" Then Spieler(x) = Spieler0(x) 
If SID$ = "S1" Then Spieler(x) = spieler1(x) 
If SID$ = "S2" Then Spieler(x) = spieler2(x)
 Next
End Function

Function CreateEnemy(anzahl%,SKIN,behaivor$)
For x=0 To anzahl
Feind.Tfeind = New TFeind
Select behaivor
 Case "ill"
Feind\F_X=Rnd(0,1024)
Feind\F_Y=Rnd(0,768)
Feind\F_A=Rnd(0,359)
Feind\LIFE=Rand(20,60)
Feind\SPEED=1
Feind\Typ$ = behaivor$
Feind\Skin = SKIN
End Select
Next
End Function

Function B_ILL()
   If Sqr((SP_X - Feind\F_X)^2 + (SP_Y-Feind\F_Y)^2)>50 Then
      Feind\F_A = ATan2(SP_Y-Feind\F_Y,SP_X-Feind\F_X)
      Feind\F_X = Feind\F_X - Cos(Feind\F_A) * Feind\Speed
      Feind\F_Y= Feind\F_Y + Sin(Feind\F_A) * Feind\Speed
   End If
End Function


;MUSTER
.W1
Data 1,"Pistole" ;NAME
Data 2,20         ;SCHADEN
Data 3,1          ;GEWICHT (IN KILO)
Data 4,1        ;KADENZ (IN SEKUNDEN)
Data 5,20*15         ;WEITE
Data 6,15         ;MAGAZIN
Data 7,10        ;M/S
Data 8,1         ;ID
;Data 9,1        Schuss Left
;~IDEal Editor Parameters:
;~F#F7#10C#115
;~C#Blitz3D
Mein Freund und Helfer:
Win7 Home Premium SP1
AMD Athlon II X4 645 3.1GHZ
8GB Ram
64bit

Tennisball

BeitragFr, Nov 05, 2010 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei den Globals diese Zeile einfügen dürfte das Problem lösen:

Code: [AUSKLAPPEN]
Global Feind.TFeind


Ausserdem würde ich dann in dem Fall in deiner Funktion (B_ILL oder whatever) eine For-Each-Schleife für die Feinde einbauen.

Xeres

Moderator

BeitragFr, Nov 05, 2010 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
"Es funktioniert nicht" ist in keinem Fall eine gute Fehlerbeschreibung. Computer machen dass, was du ihnen sagt. Sag uns, was du tun willst, und was stattdessen passiert.
Mach den Debugger an, und poste eine ausführliche Fehlermeldung mit der Passenden Zeile, benutze selber DebugLog und Stop...

Ja, die Zugriffsvariable eines Types kannst du auch Global deklarieren.
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)

Sephka

BeitragFr, Nov 05, 2010 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Er läuft weg Sad er soll zu mir kommen
2. Wie kann ich verhindern das Negative werte bei der berechnung entstehen?
Mein Freund und Helfer:
Win7 Home Premium SP1
AMD Athlon II X4 645 3.1GHZ
8GB Ram
64bit

Xeres

Moderator

BeitragFr, Nov 05, 2010 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Kleiner Tipp:
BlitzBasic: [AUSKLAPPEN]
angle = (-ATan2(ZielY - StartY , ZielX - StartX) + 360) Mod 360

Das gibt den Mathematisch korrekten Winkel 0 <= angle <= 359

Ansonsten würde ich empfehlen, schreibst du ein kleines Testprogramm, um mit Atan2 und ggf. Winkeln umgehen zu lernen.
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)

Sephka

BeitragFr, Nov 05, 2010 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
;GTA by Jonas Hachmeister alias Sephka...

 Global gfx_w=1024;1280
 Global gfx_h=768;1024
Graphics gfx_w,gfx_h,16,2

SeedRnd MilliSecs()

;GLOBALS
 Global GRAD#,Angle#,speed#
 Global S_Timer#=0,Sshoot,WID,SID,WPic
 Global W1Left,W2Left,S1LEFT,S2LEFT,SLEFT,WLEFT
 Global Feind.TFeind
;BILDER
 punch = LoadImage("GFX\Punch.png")

;SOUNDS
 ZDeath = LoadSound("SFX\E1Kill.wav")
 Reload = LoadSound("SFX\REload.wav")

;ARRAY
 Dim WAFFE$ (0,7)
 Dim Spieler(359)
 Dim Spieler0(359)
 Dim spieler1(359)
 Dim spieler2(359)
 Dim W0$(0,7)
 Dim W1$(0,7)
 Dim W2$(0,7)
 Dim feind0(359)
;FONT
 font = LoadFont("Font\Pricedown.ttf",20)       
 font1 = LoadFont("Arial",14)
;SPIELER
 Global SP_X#=400,SP_Y#=300,SP_LIFE,SP_SPEED,SP_W_ID
 Global SP_W_RANGE,SP_W_RATE,SP_W_MAGAZIN,SP_W_LEFT
 Const Grafk_rotate = 5

  ;GRAFIK ERSTELLEN
TFormFilter 0

Spieler0(0)=LoadImage("GFX\P0.png")
MidHandle Spieler0(0)
For Angle#=0 To 359
Spieler0(Angle)=CopyImage(Spieler0(0))
MaskImage Spieler0(Angle),255,255,255
RotateImage Spieler0(Angle),Angle
Next


;SPIELER MIT PISTOLE


spieler1(0)=LoadImage("GFX\P1.png")
MidHandle spieler1(0)
For Angle#=0 To 359
spieler1(Angle)=CopyImage(spieler1(0))
MaskImage spieler1(Angle),255,255,255
RotateImage spieler1(Angle),Angle
Next
;SPIELER MIT PISTOLE

spieler2(0)=LoadImage("GFX\P2.png")
MidHandle spieler2(0)
For Angle#=0 To 359
spieler2(Angle)=CopyImage(spieler2(0))
MaskImage spieler2(Angle),255,255,255
RotateImage spieler2(Angle),Angle
Next



;FEINDE
Type TFeind
  Field F_X,F_Y,F_A
  Field LIFE
  Field SPEED
  Field SKIN
  Field Typ$
  Field F_W_ID

  Field W_RANGE
  Field W_RATE
  Field W_MAGAZIN
  Field W_LEFT

 End Type

feind0(0)=LoadImage("GFX\E1.png")
MidHandle feind0(0)
For Angle#=0 To 359
feind0(Angle)=CopyImage(feind0(0))
MaskImage feind0(Angle),255,255,255
RotateImage feind0(Angle),Angle
Next


;PATRONEN
BPatrone = LoadImage("GFX\Patrone.png")

Type TPATRONE
Field X#,Y#,A#,PX,PY
Field SPEED#
Field DAMAGE#
Field RANGE#
End Type

;Waffen
file=ReadFile("DATA\W0.dat")
For x=0 To 7
W0$(0,x) = ReadLine$(file)
Next
CloseFile file


file=ReadFile("DATA\W1.dat")
For x=0 To 7
W1$(0,x) = ReadLine$(file)
Next
CloseFile file
S1LEFT = W1(0,5):W1Left = 5
file=ReadFile("DATA\W2.dat")
For x=0 To 7
W2$(0,x) = ReadLine$(file)
Next
CloseFile file
S2LEFT = W2(0,5):W2Left = 5

ChangeWeapon("W0")
CreateEnemy(1,0,"ill")
SetBuffer BackBuffer()

;###################################

;INCLUDE
;Include "Behaivor\Ill.bb"

Repeat


;TASTEN ABFRAGEN
If MouseHit(1) Then CreateEnemy(1,0,"ill")
 If KeyDown(57) And S_Timer=0 And WAFFE(0,7)><0 And SLEFT>0 Then ;SCHUSS[LEERTASTE]
  SLEFT = SLEFT - 1
  Patrone.TPatrone = New TPATRONE
  Patrone\SPEED = WAFFE(0,6)
  Patrone\x# = SP_X# + Cos(Angle) * patrone\speed#
  Patrone\y# = SP_Y# + Sin(Angle) * patrone\speed#
  Patrone\A# = Angle 
  Patrone\Damage = WAFFE(0,1)
  Patrone\px = SP_X:Patrone\Py = SP_Y
WKadenz = WAFFE(0,3)
 S_Timer# = MilliSecs()+WKadenz
  schn = PlaySound(Sshoot) 
Else If KeyDown(57) And S_Timer=0 And WAFFE(0,7)=0
schn = PlaySound(Sshoot)
WKadenz = WAFFE(0,3)
WDamage = WAFFE(0,1)
WRANGE = WAFFE(0,4)
 S_Timer# = MilliSecs()+WKadenz
For Feind.TFeind = Each TFeind
If Sqr((SP_X-Feind\F_X)^2 + (SP_Y-Feind\F_Y)^2)<=WRANGE Then Feind\LIFE = Feind\Life - WDamage:Color 255,255,255:Rect 0,0,100,100,1

Next
;DrawImage Punch,SP_x# + Cos(angle),SP_y# + Sin(angle)*speed
 End If
If KeyDown(203) Then Angle = Angle - 3;DREHEN[<-]
If KeyDown(205) Then Angle = Angle + 3;DREHEN[->]
If KeyDown(200) Then;VORNE[HOCH]
 If speed < 0 speed = 0
  speed# = speed# + 0.05
 ElseIf KeyDown(208) Then;RÜCKWÄRTS[PFEIL UNTEN]
  If speed >  0 speed = 0
   speed# = speed# - 0.025
  Else
   speed = 0
 End If

;##WAFFE WECHSELN##
If KeyHit(3) Then ChangeWeapon("W1")
If KeyHit(4) Then ChangeWeapon("W2")
If KeyHit(2) Then ChangeWeapon("W0")
;############################
If Angle > 359 Then Angle = 0
If Angle < 0 Then Angle = 359
Wweight# = WAFFE(0,2):Wweight = Wweight/2
If speed# > 2-Wweight Then speed# = 2-Wweight
If speed# < -2+Wweight Then speed# = -2+Wweight

SP_X# = SP_X# + Cos(Angle) * speed#
SP_Y# = SP_Y# + Sin(Angle) * speed#

If SP_X < 1 Then SP_X = 1
If SP_X >gfx_w  Then SP_X = gfx_w
If SP_Y < 1 Then SP_Y = 1
If SP_Y > gfx_h Then SP_Y = gfx_h

DrawImage Spieler(Angle),SP_X,SP_Y;##Spieler Zeichnen##
;WAFFE CHECKEN

If SLEFT=0 And WLEFT >0 Then SLEFT = WAFFE(0,5):WLEFT = WLEFT-1:Rchn = PlaySound(Reload):S_Timer = MilliSecs() + 1000

;FEINDE ZEICHNEN USW...
For Feind.Tfeind = Each TFeind
B_ILL()
If Feind\Skin = 0 Then DrawImage feind0(Feind\F_A),Feind\F_X,Feind\F_Y
If Feind\Life<=0 Then
If Feind\Skin = 0 Then Dchn = PlaySound(ZDeath)     
 Delete Feind.TFeind
End If
 Next

;##PATRONEN DURCHGEHEN ZEICHNEN\LÖSCHEN...##
  For PATRONE = Each TPATRONE
   XD=Patrone\x-Patrone\px
   YD=Patrone\y-Patrone\py
   Abstand = Sqr(XD^2 + YD^2)
   WRANGE = WAFFE(0,4)


    If Abstand>WRANGE Then Delete Patrone.TPATRONE:Exit 
     Patrone\x# = Patrone\x# + Cos(Patrone\a) * patrone\speed#
     Patrone\y# = Patrone\y# + Sin(Patrone\a) * patrone\speed#
  Color 100,100,100
 DrawImage BPatrone,PATRONE\x,PATRONE\y
 For Feind = Each TFeind
  If ImagesOverlap(BPatrone,Patrone\x,Patrone\y,feind0(0),Feind\F_X,Feind\F_Y)=1 Then
Feind\LIFE=Feind\LIFE-Patrone\Damage
Delete Patrone.TPatrone:Exit
End If
 Next
Next

;##STATUS ZEICHNEN##
SetFont font1
If WAFFE(0,7) >< 0 Then Text 1,1,SLEFT+"/"+WLEFT 


DrawImage WPic,0,gfx_h - 49
SetFont font
Color 255,255,255
Text 55,gfx_h - 49,WAFFE(0,0)
Flip
Cls
If S_Timer < MilliSecs() Then S_Timer = 0
Until KeyHit(1)

Function ChangeWeapon(WID$)
;WAFFEN
If WAFFE(0,7) = 1 Then S1LEFT=SLEFT:W1Left=WLEFT
If WAFFE(0,7) = 2 Then S2LEFT=SLEFT:W2Left=WLEFT

  For x=0 To 7
If WID$="W0" Then WAFFE(0,x)=W0(0,x)
If WID$="W1" Then WAFFE(0,x)=W1(0,x):SLEFT=S1LEFT:WLEFT=W1Left
If WID$="W2" Then WAFFE(0,x)=W2(0,x):SLEFT=S2LEFT:WLEFT=W2Left

  Next
If WID$="W0" Then ChangeSkin("S0")
If WID$="W1" Then ChangeSkin("S1")
If WID$="W2" Then ChangeSkin("S2")

Sshoot = LoadSound("SFX\WAFFE_"+WAFFE(0,7)+".wav")
WPic = LoadImage("GFX\W"+WAFFE(0,7)+".png")
MaskImage WPic,255,0,0
End Function


Function ChangeSkin(SID$)

 For x=0 To 359
If SID$ = "S0" Then Spieler(x) = Spieler0(x) 
If SID$ = "S1" Then Spieler(x) = spieler1(x) 
If SID$ = "S2" Then Spieler(x) = spieler2(x)
 Next
End Function

Function CreateEnemy(anzahl%,SKIN,behaivor$)
For x=0 To anzahl
Feind.Tfeind = New TFeind
Select behaivor
 Case "ill"
Feind\F_X=Rnd(0,1024)
Feind\F_Y=Rnd(0,768)
Feind\F_A=Rnd(0,359)
Feind\LIFE=Rand(20,60)
Feind\SPEED=1
Feind\Typ$ = behaivor$
Feind\Skin = SKIN
End Select
Next
End Function

Function B_ILL()
   ;If Sqr((SP_X-Feind\F_X)^2 + (SP_Y-Feind\F_Y)^2)<200 Then
      Feind\F_A = (-ATan2(Feind\F_Y-SP_Y,Feind\F_X-SP_Y) + 360)Mod 360
      If Feind\F_A = 360 Then Feind\F_A = 0
      DebugLog Feind\F_A
      Feind\F_X = Feind\F_X - Cos(Feind\F_A) * Feind\Speed
      Feind\F_Y= Feind\F_Y + Sin(Feind\F_A) * Feind\Speed
   ;End If
End Function


;MUSTER
.W1
Data 1,"Pistole" ;NAME
Data 2,20         ;SCHADEN
Data 3,1          ;GEWICHT (IN KILO)
Data 4,1        ;KADENZ (IN SEKUNDEN)
Data 5,20*15         ;WEITE
Data 6,15         ;MAGAZIN
Data 7,10        ;M/S
Data 8,1         ;ID
;Data 9,1        Schuss Left
;~IDEal Editor Parameters:
;~F#F7#10C#115
;~C#Blitz3D

So es klappt aber nicht ganzzz super... hat noch jemand einen Tipp?
Mein Freund und Helfer:
Win7 Home Premium SP1
AMD Athlon II X4 645 3.1GHZ
8GB Ram
64bit

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group