2d 360 grad steuerung?
Übersicht

silent_sourceBetreff: 2d 360 grad steuerung? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi
ich möchte ein spiel programmieren bei dem man ein raumschiff hat das sich um 360 grad drehen kann mit rechts links pfeiltasten und sich dann in die jeweilige richtung bewegt wenn man nach vorne drückt. Eigentlich genau so wie das in asteroid uns spacecombat von robbs bb kurs gemacht wird nur das ich den code einfach nicht verstehe. ![]() Der Beispielcode unten kommt dem schon ziemlich nahe nur wie mache ich das wenn ich eine grafik habe statt des punktes das diese sich auch mitbewegt bei der Drehung ![]() ; Rob´s BB-Kurs 2 ; Robert Gerlach 11.2001 ; ; Sinus/Cosinus - Beispiel Nr. 3 ;---------------------------------------------- ; Einen Punkt in verschiedene Richtungen steuern. ; ; Links: nach links drehen ; Rechts: Nach rechts drehen ; Oben: Schneller ; Unten: Langsamer (und rückwärts, wenn Geschwindigkeit unter 0 ist) ; 640x480 bei höchstmöglicher Farbtiefe im Fenstermodus. Graphics 640, 480, 0, 2 SetBuffer BackBuffer() ; Startpunkt und Startgeschwindigkeit festlegen. x# = 320 y# = 240 speed# = 1 Repeat ; Tasten abfragen If KeyDown(203) Then winkel = winkel - 5 ; Links If KeyDown(205) Then winkel = winkel + 5 ; Rechts If KeyDown(200) Then speed# = speed# + .01 ; Oben If KeyDown(208) Then speed# = speed# - .01 ; Unten ; Damit der Winkel nicht über 360 oder unter 0 geht. If winkel > 360 Then winkel = 1 If winkel < 1 Then winkel = 360 ; Und damit der Punkt nicht verschwindet... If x# > 640 Then x# = 1 If x# < 0 Then x# = 640 If y# > 480 Then y# = 1 If y# < 0 Then y# = 480 ; Position entsprechend dem Winkel verändern. x# = x# + (Cos(winkel)*speed#) y# = y# + (Sin(winkel)*speed#) ; Punkt malen Plot x#, y# Flip Until KeyHit(1) End |
||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tja, dazu musst du 360 einzelbilder erstellen:
Code: [AUSKLAPPEN] dim ship(360)
ship(0)= loadimage("ship.bmp") for i = 1 to 360 ship(i)=copyimage(ship(0)) rotateimage ship(i),i next -Du erstellst ein 360 ints großes Dimensionsfeld -Du gehs das Feld mit einer For-Schleife durch und Kopierst dabei das Bild deines Raumschiffes in jeden Feld-Eintrag und drehst es dann um den entsprechenden Winkel Die Attribute MaskImage und HandleImage werden ja mit dem Kopieren übernommen. Und dann beim Zeichnen: Code: [AUSKLAPPEN] Drawimage ship(winkel),x,y
|
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
JanK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
als erstes musste das Bild laden und mit rotate image drehen:
Code: [AUSKLAPPEN] Dim Spieler[359] ;->Das Dim feld For x = 1 To 360 Spieler[x] = LoadImage ("gfx/Rohr.png") MidHandle Spieler[x] ;Bild mittelpunkt in die Mitte RotateImage Spieler[x] ,x ;Bild drehen Next Außerdem benötigt so eine variable die die gerad Anzahl des Spielers enthält: Code: [AUSKLAPPEN] Global Grad
dann musst du noch mit drawimage das richtige Bild malen: Code: [AUSKLAPPEN] Drawimage Spieler(Grad),x,y,0
Edit: Mist zu spät ![]() |
||
Ich habe keine Zeit, mich zu beeilen.
The Pollux Conflict || The Pollux Renegades || Lipstick-live.de |
silent_source |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke für eure schnellen antworten ![]() hier der lösungscode für alle interessierten Graphics 800, 600, 0, 2 ; Startpunkt und Startgeschwindigkeit festlegen. speed# = 0 raumschiffx#=400 raumschiffy#=300 raumschiffbreite=30 raumschiffhoehe=15 raumschiff=CreateImage(raumschiffbreite,raumschiffhoehe) SetBuffer ImageBuffer(raumschiff) Color 0,0,255 Oval 0,0,raumschiffbreite,raumschiffhoehe,1 dim raumschiffe(360) for i = 1 to 360 raumschiffe(i)=copyimage(raumschiff) rotateimage raumschiffe(i),i next Repeat cls ; Tasten abfragen If KeyDown(203) Then winkel = winkel - 5 ; Links If KeyDown(205) Then winkel = winkel + 5 ; Rechts If KeyDown(200) Then speed# = speed# + .01 ; Oben If KeyDown(208) Then speed# = speed# - .01 ; Unten ; Damit der Winkel nicht über 360 oder unter 0 geht. If winkel > 360 Then winkel = 1 If winkel < 1 Then winkel = 360 ; Position entsprechend dem Winkel verändern. raumschiffx# = raumschiffx# + (Cos(winkel)*speed#) raumschiffy# = raumschiffy# + (Sin(winkel)*speed#) ;das raumschiff zeichen setbuffer backbuffer() DrawImage raumschiffe(winkel),raumschiffx#,raumschiffy# Flip Until KeyHit(1) End |
||
![]() |
DerHase |
![]() Antworten mit Zitat ![]() |
---|---|---|
Imho sind 360 Bilder übertrieben, versuch es z.B. mal mit 36. Denn wenn Du animierste Objekte hast und viele verschiedene Objekte, wird der Rechner mit so vielen Bildern ziemlich schnell in die Kniee gehn. | ||
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mal ne frage muss man nicht den
Code: [AUSKLAPPEN] Tformfilter 0 ausstellen. Wenn man da eine maskimage hat gibt das doch so unschöne verwischungen oder nicht ![]() |
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ja, damit keine ecken enstehen, TFormFilter 0 rundet die ecken aus ![]() Gruss Andreas |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau andersrum. Der Filter ist standardmäßig auf true und glättet Kanten die durch das drehen pixelig aussehen würden. Transparenzfarben sind aber dann hinüber. | ||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ich
Das ist nicht so schlimm (in diesem Fall sogar gut), denn er kopiert die Bilder immer vom Original. Das heißt: Das erste Bild wird kopiert gedreht und etwas verwischt, das zweite Bild wird vom Original (das keine Verwischungen hat) kopiert, gedreht und wieder nur etwas verwischt. Das ergibt einen besseren Effekt als mit Tformfilter 0. Eine Katastrophe wäre folgenges(habe nur die wichtigsten Stellen kopiert!!!: Code: [AUSKLAPPEN] raumschiff=CreateImage(raumschiffbreite,raumschiffhoehe)
raumschiffe(0)=copyimage(raumschiff) for i = 1 to 360 raumschiffe(i)=copyimage(raumschiffe(i-1)) rotateimage raumschiffe(i),i next Durch den Tformfilter 1 würde jedes Bild immer mehr verwischt werden!! D.h. raumschiffe(360) wäre nicht mehr zu erkennen. Der Nachteil des Eingeschalteten Tformfilters (wie du sagtest) liegt bei maskimage, weil da unschöne Ränder sichtbar werden. Der Vorteil hingegen ist, dass man Abstufungen nicht erkennt (auf der gleichen Hintergrundfarbe) d.h. wenn silent_source einen schwarzen Hintergrund hat, und die Bilder auf schwarzem Hintergrund erstellt, kann er die Vorteile des Tformfilters nutzen. ![]() |
||
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ja gut danke habe den code nicht richtieg gelsesen ![]() |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo!
Ich kann nur empfehlen kein array für den spieler zu nehmen! Ich hab das nun schon 2 mal gemacht und immer kamen komische Fehler bei bestimmten winkel im zusammenhang mit ImagesCollide. Bin dann auf die TileImage ausgewichen, sieht dann ca. so aus: Code: [AUSKLAPPEN] Global player=CreateImage(32,32,180) MaskImage player,255,0,255 MidHandle player TFormFilter 0 For i=0 To 179 SetBuffer ImageBuffer(player,i) img2=CopyImage(img) MidHandle img2 RotateImage img2,i*2 Color 255,0,255 Rect 0,0,32,32 DrawImage img2,16,16 |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group