winkel klappt nich :-(

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: winkel klappt nich :-(

BeitragSa, Dez 23, 2006 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Sad Code: [AUSKLAPPEN]
Graphics 640,480

Type s;Type s (bzw schuss)
Field x
Field y
Field winkel#
End Type

SeedRnd MilliSecs()


Global s.s;Globale variablen
Global g.s


Zielgerat = CreateImage(30,30);Erstellt norm. Zielgerät
SetBuffer ImageBuffer(Zielgerat)
Oval 7.5,7.5,15,15,0
Line 15,0,15,30
Line 0,15,30,15


Turm = CreateImage(100,100);Erstellt den Turm
SetBuffer ImageBuffer(Turm)
Oval 0,0,100,100,0
Oval 15,15,70,70,0
Line 50,0,50,15
Line 0,50,15,50
Line 100,50,85,50
Line 50,100,50,85
Plot 50,50

RZielgerat = CreateImage(30,30);Erstellt das Rote Zielgerät
SetBuffer ImageBuffer(RZielgerat)
Color 255,0,0
Oval 7.5,7.5,15,15,0
Line 15,0,15,30
Line 0,15,30,15


SetBuffer BackBuffer();Setzt backBuffer()

x = 300;startpos X
y = 200;startpos Y

HidePointer();lässt mauszeiger verschwinden

CpuX = Rand(0,640);Legt die posX des Comp fest
CpuY = Rand(0,480);Legt die posY des Comp fest

Repeat;Schleifen anfang

F = Rand(0,20);Rand für den zufallfeure des Comp



If F = 10  Then ;Wenn Rand = 10 ist dann...
g.s = New s;...neuen type erstellen
g\x = CpuX+50
g\y = CpuY+50
g\winkel# = ATan2(x-10,y-10)
EndIf

Color 0,150,0;Farbe : Grün
Rect 0,0,640,480;setzt grünen BackGround

mx = MouseX();MausX pos
my = MouseY();MausY pos

w# = ATan2(mx-x,my-y);winkel mx > my



Color 255,255,255;Farbe: weiß

If MouseHit(1) Or KeyHit(57) Then;Wenn maustaste oder leertaste gedrückt dann...
s.s = New s;...neuer Type
s\x = x
s\y = y
s\winkel# = w#
EndIf

;mit den folgenden 8 befehle bewegt man den Spieler und setzt die grenzen fest:
If KeyDown(200) Or KeyDown(17) Then y = y - 10
If KeyDown(208) Or KeyDown(31)Then y = y + 10
If KeyDown(203) Or KeyDown(30)Then x = x - 10
If KeyDown(205) Or KeyDown(32)Then x = x + 10
If x < 0   Then x = 0
If x > 620 Then x = 620
If y < 0   Then y = 0
If y > 460 Then y = 460

;Das ist der spieler:
Oval x-10,y-10,20,20,0
Line x,y,x+Sin(w#)*50,y+Cos(w#)*50

DrawImage Turm,CpuX,CpuY;DrawImaget den "Turm"

Color 50,0,10;Farbe: Braun
;die folgenden 4 zeilen befele machen den effect von man nur ein teil der "Karte" sieht
Rect x-800,y+100,1600,800
Rect 0,0,x-100,y+100
Rect 0,0,x+800,y-100
Rect x+100,y-800,800,1600
Color 255,255,255

If ImagesOverlap(Zielgerat,mx,my,Turm,CpuX,CpuY) Then ;kollision
DrawImage RZielgerat,mx,my
Else
DrawImage Zielgerat,mx,my
EndIf


For s.s = Each s;For...Each...Next schleife für spieler schuss
Color 255,0,0
Line s\x, s\y, s\x+Sin(s\winkel#)*10, s\y+Cos(s\winkel#)*10
s\x = s\x + Sin(s\winkel#)*10
s\y = s\y + Cos(s\winkel#)*10
If s\x > 700 Or s\x < - 10 Or s\y > 700 Or s\y < - 10 Then
Delete s.s
EndIf
Next


For g.s = Each s;For...Each...Next Schleife für Comp. schuss
Color 255,0,0
Line g\x, g\y, g\x+Sin(g\winkel#)*10, g\y+Cos(g\winkel#)*10
g\x = g\x + Sin(g\winkel#)*10
g\y = g\y + Cos(g\winkel#)*10
If g\x > 700 Or g\x < - 10 Or g\y > 700 Or g\y < - 10
Delete g.s
EndIf
Next



 
Flip
Cls

Until KeyHit(1)
End
Sad

Der "Turm" wir djetzt immer an eine zuffällige stelle gesetzt, man soll noch heraus finden wo Very Happy aber der schießt nich in die richtung des spielers... Sad


Wieso antwortet mia niemnand Crying or Very sad ??
  • Zuletzt bearbeitet von ToeB am Sa, Dez 23, 2006 23:41, insgesamt 2-mal bearbeitet

FireballFlame

Betreff: Re: winkel klappt nich :-(

BeitragSa, Dez 23, 2006 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Crack93 hat Folgendes geschrieben:
Wieso antwortet mia niemnand Crying or Very sad ??

Na aber hallo! Geduld! Das ist ein Forum und kein Chat!
Und ein CounterStrike2D dürfte sehr schwer sein, sowas kann eh nur DC Wink
---------

Ok, aber zum Thema: ^^
Ich komm zwar zur Zeit nicht an mein BB, aber hattest du nicht letztens schon ein Problem mit Abschusswinkeln??
Wo liegt denn dann schonwieder ein Problem? Wink
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Axe

BeitragSa, Dez 23, 2006 23:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mir deinen Quelltext mal angekuckt und ausprobiert.
Aber komplett ohne Kommentare muss man sich sämtlichen Zusammenhang immer erst selber erarbeiten. Das macht viel Mühe.Neutral

Um schnelle Hilfe zu erhalten solltest du Kommentare einfügen. Natürlich muss nicht jeder Befehl erklärt werden, aber die wichtigsten Funktionseinheiten und die Bedeutung der Variablennamen sollten schon notiert werden.

'->Wenn du ein paar Kommentare einfügst, schaue ich mir den Quellcode sicher mal an, ansonsten eher weniger.

ToeB

BeitragSo, Dez 24, 2006 10:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier der Überarbeitete Code: [AUSKLAPPEN]

Graphics 640,480

Type s;Type s (bzw schuss)
Field x
Field y
Field winkel#
End Type

SeedRnd MilliSecs()


Global s.s;Globale variablen
Global g.s


Zielgerat = CreateImage(30,30);Erstellt norm. Zielgerät
SetBuffer ImageBuffer(Zielgerat)
Oval 7.5,7.5,15,15,0
Line 15,0,15,30
Line 0,15,30,15


Turm = CreateImage(100,100);Erstellt den Turm
SetBuffer ImageBuffer(Turm)
Oval 0,0,100,100,0
Oval 15,15,70,70,0
Line 50,0,50,15
Line 0,50,15,50
Line 100,50,85,50
Line 50,100,50,85
Plot 50,50

RZielgerat = CreateImage(30,30);Erstellt das Rote Zielgerät
SetBuffer ImageBuffer(RZielgerat)
Color 255,0,0
Oval 7.5,7.5,15,15,0
Line 15,0,15,30
Line 0,15,30,15


SetBuffer BackBuffer();Setzt backBuffer()

x = 300;startpos X
y = 200;startpos Y

HidePointer();lässt mauszeiger verschwinden

CpuX = Rand(0,640);Legt die posX des Comp fest
CpuY = Rand(0,480);Legt die posY des Comp fest

Repeat;Schleifen anfang

F = Rand(0,20);Rand für den zufallfeure des Comp



If F = 10  Then ;Wenn Rand = 10 ist dann...
g.s = New s;...neuen type erstellen
g\x = CpuX+50
g\y = CpuY+50
g\winkel# = ATan2(x-10,y-10)
EndIf

Color 0,150,0;Farbe : Grün
Rect 0,0,640,480;setzt grünen BackGround

mx = MouseX();MausX pos
my = MouseY();MausY pos

w# = ATan2(mx-x,my-y);winkel mx > my



Color 255,255,255;Farbe: weiß

If MouseHit(1) Or KeyHit(57) Then;Wenn maustaste oder leertaste gedrückt dann...
s.s = New s;...neuer Type
s\x = x
s\y = y
s\winkel# = w#
EndIf

;mit den folgenden 8 befehle bewegt man den Spieler und setzt die grenzen fest:
If KeyDown(200) Or KeyDown(17) Then y = y - 10
If KeyDown(208) Or KeyDown(31)Then y = y + 10
If KeyDown(203) Or KeyDown(30)Then x = x - 10
If KeyDown(205) Or KeyDown(32)Then x = x + 10
If x < 0   Then x = 0
If x > 620 Then x = 620
If y < 0   Then y = 0
If y > 460 Then y = 460

;Das ist der spieler:
Oval x-10,y-10,20,20,0
Line x,y,x+Sin(w#)*50,y+Cos(w#)*50

DrawImage Turm,CpuX,CpuY;DrawImaget den "Turm"

Color 50,0,10;Farbe: Braun
;die folgenden 4 zeilen befele machen den effect von man nur ein teil der "Karte" sieht
Rect x-800,y+100,1600,800
Rect 0,0,x-100,y+100
Rect 0,0,x+800,y-100
Rect x+100,y-800,800,1600
Color 255,255,255

If ImagesOverlap(Zielgerat,mx,my,Turm,CpuX,CpuY) Then ;kollision
DrawImage RZielgerat,mx,my
Else
DrawImage Zielgerat,mx,my
EndIf


For s.s = Each s;For...Each...Next schleife für spieler schuss
Color 255,0,0
Line s\x, s\y, s\x+Sin(s\winkel#)*10, s\y+Cos(s\winkel#)*10
s\x = s\x + Sin(s\winkel#)*10
s\y = s\y + Cos(s\winkel#)*10
If s\x > 700 Or s\x < - 10 Or s\y > 700 Or s\y < - 10 Then
Delete s.s
EndIf
Next


For g.s = Each s;For...Each...Next Schleife für Comp. schuss
Color 255,0,0
Line g\x, g\y, g\x+Sin(g\winkel#)*10, g\y+Cos(g\winkel#)*10
g\x = g\x + Sin(g\winkel#)*10
g\y = g\y + Cos(g\winkel#)*10
If g\x > 700 Or g\x < - 10 Or g\y > 700 Or g\y < - 10
Delete g.s
EndIf
Next



 
Flip
Cls

Until KeyHit(1)
End
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Eingeproggt

BeitragSo, Dez 24, 2006 12:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiss nicht, wo das Problem liegt. Der Schuss geht in Richtung Fandekreuz, manchmal ein bisschen daneben, aber ist nicht so schlimm.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

Schnuff

BeitragSo, Dez 24, 2006 12:45
Antworten mit Zitat
Benutzer-Profile anzeigen
nein, nicht das was in der mitte steht ist der Turm(dachte ich zuerst auch...)
Programmers dont die. They gosub without return...

Axe

Betreff: Gelöst

BeitragSo, Dez 24, 2006 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt hab ich den Quellcode richtig durchgearbeitet.
Die Anwendung von atan2 war nicht richtig. Außerdem bist du alles Schüsse zwei mal direkt hintereinander durchgegangen. Denn du hast ein Type für die Schüsse definiert, dann brauchst du das auch nur einmal durchzugehen. Du hast bestimmt gedacht, dass die Schüsse vom Spieler und Cpu einzeln durchgegangen werden müssen, da sie mit verschieden Variablennamen erstellt worden sind. Das ist aber egal.
Bei der Winkelberechnungen musst du daran denken, dass du die Mittelpunkte von den Bildern nehmen musst. (Bei dem Turm und dem Mauszeiger).

Hier der berechtigte Code: [AUSKLAPPEN]

Graphics 640,480,32,2

Type s;Type s (bzw schuss)
Field x
Field y
Field winkel#
End Type

SeedRnd MilliSecs()


Global s.s;Globale variablen
Global g.s


Zielgerat = CreateImage(30,30);Erstellt norm. Zielgerät
SetBuffer ImageBuffer(Zielgerat)
Oval 7.5,7.5,15,15,0
Line 15,0,15,30
Line 0,15,30,15


Turm = CreateImage(100,100);Erstellt den Turm
SetBuffer ImageBuffer(Turm)
Oval 0,0,100,100,0
Oval 15,15,70,70,0
Line 50,0,50,15
Line 0,50,15,50
Line 100,50,85,50
Line 50,100,50,85
Plot 50,50

RZielgerat = CreateImage(30,30);Erstellt das Rote Zielgerät
SetBuffer ImageBuffer(RZielgerat)
Color 255,0,0
Oval 7.5,7.5,15,15,0
Line 15,0,15,30
Line 0,15,30,15


SetBuffer BackBuffer();Setzt backBuffer()

x = 300;startpos X
y = 200;startpos Y

HidePointer();lässt mauszeiger verschwinden

CpuX = Rand(0,640);Legt die posX des Comp fest
CpuY = Rand(0,480);Legt die posY des Comp fest

Repeat;Schleifen anfang

If F = Rand(0,20)Then ;Wenn Rand = 10 ist dann...
g.s = New s;...neuen type erstellen
g\x = CpuX+50
g\y = CpuY+50
g\winkel# = ATan2(x-(Cpux+50),y-(Cpuy+50))
EndIf

Color 0,150,0;Farbe : Grün
Rect 0,0,640,480;setzt grünen BackGround

mx = MouseX();MausX pos
my = MouseY();MausY pos

w# = ATan2((mx+15)-x,(my+15)-y)

Color 255,255,255;Farbe: weiß

If MouseHit(1) Or KeyHit(57) Then;Wenn maustaste oder leertaste gedrückt dann...
s.s = New s;...neuer Type
s\x = x
s\y = y
s\winkel# = w#
EndIf

;mit den folgenden 8 befehle bewegt man den Spieler und setzt die grenzen fest:
If KeyDown(200) Or KeyDown(17) Then y = y - 10
If KeyDown(208) Or KeyDown(31)Then y = y + 10
If KeyDown(203) Or KeyDown(30)Then x = x - 10
If KeyDown(205) Or KeyDown(32)Then x = x + 10
If x < 0   Then x = 0
If x > 620 Then x = 620
If y < 0   Then y = 0
If y > 460 Then y = 460

;Das ist der spieler:
Oval x-10,y-10,20,20,0
Line x,y,x+Sin(w#)*50,y+Cos(w#)*50

DrawImage Turm,CpuX,CpuY;DrawImaget den "Turm"

Color 50,0,10;Farbe: Braun
;die folgenden 4 zeilen befele machen den effect von man nur ein teil der "Karte" sieht
Rect x-800,y+100,1600,800
Rect 0,0,x-100,y+100
Rect 0,0,x+800,y-100
Rect x+100,y-800,800,1600
Color 255,255,255

If ImagesOverlap(Zielgerat,mx,my,Turm,CpuX,CpuY) Then ;kollision
DrawImage RZielgerat,mx,my
Else
DrawImage Zielgerat,mx,my
EndIf


For s.s = Each s;For...Each...Next schleife für spieler schuss
Color 255,0,0
Line s\x, s\y, s\x+Sin(s\winkel#)*10, s\y+Cos(s\winkel#)*10
s\x = s\x + Sin(s\winkel#)*10
s\y = s\y + Cos(s\winkel#)*10
If s\x > 700 Or s\x < - 10 Or s\y > 700 Or s\y < - 10 Then
Delete s.s
EndIf
Next

Flip
Cls

Until KeyHit(1)
End


Schöne Weihnachten!!
MfG Axe

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group