Crosshair zeichnen-.-

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

5k41

Betreff: Crosshair zeichnen-.-

BeitragDi, Dez 06, 2005 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Ich und ein Freund programmieren grad an ein 2d spiel a la CS 2D (natürlich lange net so gut Wink ) nun habe ich das Problem, dass ich meinen Spieler um 360° per Pfeiltasten dreh und nun mein crosshair (was ca. 100 px vom player entfernt sein soll) sich immer mitdrehen/bewegen soll...ich hab leider keine Ahnung wie ich das machen soll Sad hier noch ein kleines programm, was ich nur geschrieben hab um alle bewegungs funktionen zu testen (wird nachher alles handlich in funktionen verpackt und mit types und allem verarbeitet)
BlitzBasic: [AUSKLAPPEN]

Graphics 1024,768,32

SetBuffer BackBuffer()

Dim player1(360)
Dim player2(360)

x=50
y=50
x2=500
y2=500

fliese=LoadImage(\"../gfx/tileset.bmp\")
waffe=LoadAnimImage(\"../gfx/Pistole.bmp\",64,64,0,8)
MidHandle waffe
MaskImage waffe,255,0,255
cross=LoadImage(\"../gfx/cross.bmp\")
MaskImage cross,255,0,255

For i=0 To 360

player1(i)=LoadImage(\"../gfx/player1.bmp\")
MaskImage player1(i),255,0,255
MidHandle player1(i)
RotateImage player1(i),i
MaskImage player1(i),255,0,255

player2(i)=LoadImage(\"../gfx/player2.bmp\")
MaskImage player2(i),255,0,255
MidHandle player2(i)
RotateImage player2(i),i

Text 0,0,\"Drehen der Bilder schon bei \"+i+\" GRAD!\"
Flip
Cls

Next

While Not KeyDown(1)

TileImage fliese

DrawImage player1(winkel),x,y
DrawImage player2(winkel2),x2,y2
DrawImage cross,cx,cy
DrawImage cross,cx2,cy2

DrawImage waffe,x,y,wframe
DrawImage waffe,x2,y2,wframe2

If KeyDown(205) Then winkel=winkel+1
If KeyDown(203) Then winkel=winkel-1
If KeyDown(30) Then winkel2=winkel2-1
If KeyDown(32) Then winkel2=winkel2+1

If winkel=360 Then winkel=0
If winkel=-1 Then winkel=360
If winkel2=360 Then winkel2=0
If winkel2=-1 Then winkel2=360

If winkel>337 Then wframe=0
If winkel>22 And winkel<45 Then wframe=1
If winkel>67 And winkel<90 Then wframe=2
If winkel>112 And winkel<135 Then wframe=3
If winkel>157 And winkel<180 Then wframe=4
If winkel>202 And winkel<225 Then wframe=5
If winkel>247 And winkel<270 Then wframe=6
If winkel>292 And winkel<315 Then wframe=7
If winkel2>337 Then wframe2=0
If winkel2>22 And winkel2<45 Then wframe2=1
If winkel2>67 And winkel2<90 Then wframe2=2
If winkel2>112 And winkel2<135 Then wframe2=3
If winkel2>157 And winkel2<180 Then wframe2=4
If winkel2>202 And winkel2<225 Then wframe2=5
If winkel2>247 And winkel2<270 Then wframe2=6
If winkel2>292 And winkel2<315 Then wframe2=7

Text 0,0,\"Player1:\"+winkel
Text 0,14,\"Player2:\"+winkel2


Flip

Cls

Wend

End
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Spikespine

BeitragDi, Dez 06, 2005 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hui der Code ist ja grausig Smile
Such dir da lieber ne andere Lösung als diese If-Then Wüsten, ich wette das geht mit einer Formel in einer Zeile.

Setz dich intensic mit den Winkelfunktionen sinus und cosinus auseinander. Damit geht das nämlich!
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

5k41

BeitragDi, Dez 06, 2005 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
*Hust* Wink
ne wie schon gesacht ich hat net vor mir ühe zu geben wollt nur sehen ob das funtzt...und ich glaub das mit den if abfragen is schon richtig, da es die waffe nur in 45° bildern gibt...
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

SoNenTyp

BeitragDi, Dez 06, 2005 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Müsste doch reichen wenn du einfach den Winkel durch 45 teilst oder? Das ergebnis ist dann die Framenummer.


Schau dir mal die Functionen Sin Cos Tan usw. an. Da findest du was du brauchst.
Gruss Der Typ.

User posted image

Spikespine

BeitragDi, Dez 06, 2005 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
wframe = winkel / 45
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

5k41

BeitragDi, Dez 06, 2005 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey daran hab ich ja noch garnet gedacht...und was is dann mit dem rest??wie kann ich den denn einfach unterbinden und ihm sagen das er auch bei null nicht mucken soll??

~Edit~

Ich will nicht den rest einfach wechlassen sondern je nach dem das er selbstständig ab/auf rundet^^
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Digi_

BeitragDi, Dez 06, 2005 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Trigonometrie
Sinus/Cosinus/Tangens..
benutze die Forensuche, das wurde schon so oft hier gefragt

SoNenTyp

BeitragDi, Dez 06, 2005 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Pseudocode:

if(ErstezahlhinterdemKomma>=5) then
Zahl=ZahlvordemKomma+1
else
Zahl=ZahlvordemKomma
endif


Smile Bin zu faul das jetzt in richtigen code zu schreiben.

Edit: löl ich sehe gerade, so pseudo ist der code gar nicht Shocked Very Happy .
Gruss Der Typ.

User posted image

5k41

BeitragDi, Dez 06, 2005 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
OK Danke Leutz!
Ich glaub ich muss mich echt mal genauer mit Cos/Sin/Atan usw. befassen!
Noch eine frage, wie bekomm ich die "erstezahlhinterdemkomma" ? und gibt es nicht vll einfach einen BB befehl zum Runden weil ich müsste dann ja schreiben:

if zehntezahlhintermkomma>=5 then
neuntezahlhintermkomma=zehntezahlhintermkomma+1
else
neuntezahlhintermkomma=zehntezahlhintermkomma
endif
if neuntezahlhintermkomma>=5 then
achtezahlhintermkomma=zehntezahlhintermkomma+1
else
achtezahlhintermkomma=zehntezahlhintermkomma
endif

usw. jenachdem wie genau ichs haben will...
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Dez 07, 2005 2:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo SoNenTyp, deine If-Abfragen lassen sich auch mit Int lösen. Int macht nähmlich eine Mathematische Rundung einer Zahl also:
aus 0,49 wird 0
aus 0,50 wird 1

Zusätzlich gibt es noch Ceil und Floor, die entweder immer Abrunden (Floor=Nachkommastelle abschneiden) oder immer Aufrunden (Ceil).

Ich glaube aber, daß es in BB überhaupt nicht notwendig ist irgendwas zu runden, da Brüche schon im vorwege bei der Imagedarstellung so intern umgerechnet werden, daß es immer hin kommt. Was natürlich den Programmierer wieder mal die Arbeit erleichtert. Man muß nur darauf achten, daß die Werte nicht negativ werden bzw. über der Bildzahl hinaus schiessen. Das letztere kann man mit Mod ganz einfach erledigen. Habe mal ein Raumschiffspiel gemacht, wo ein gerendertes Raumschiff mit 180 Bildern (jeweils in 2° Schritten) mit Drawimage raumschiff xp,yp,winkel/2 genau das anzeigte was ich auch haben wollte.

SoNenTyp

BeitragMi, Dez 07, 2005 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo danke Hectic.

Das wusste ich noch garnicht, ich dachte der befehl währe bei BB=VB. Danke
Gruss Der Typ.

User posted image

5k41

BeitragMi, Dez 07, 2005 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke!!Genau sowas hab ich gesucht! Ich denke mit euren lösungen kann ich viel anfangen!!!

THEMA HAT SICH FÜR MICH ERLEDIGT!

PS:Ich glaub ich hab Sin und Cos grad verstanden^^
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

5k41

BeitragSo, Dez 11, 2005 0:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry wegen Doppelpost abba ich wollt nur noch schnell sagen das ich es nun hinbekommen hab das crosshair zu zeichenen und alles funtzt!
Vll hört ihr in ein paar moaten inna projekte topic nochma was von mir bis dann!
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group