Vom Spaceshooter zum Autorennspiel - Problem^^
Übersicht BlitzBasic Beginners-Corner
Nichts95 |
So, Mai 20, 2007 13:34 Antworten mit Zitat |
|
---|---|---|
Ok, jetzt klappts^^ Problem dabei ist eben nur dass das Auto - egal in welcher Richtung gedreht - immer nach rechts fährt. Das ist ja natürlich wie vrohergesehen, bloß habe ich keine Ahnung wie man das jetzt so machen könnte dass das Auto in die gesteuerte Richtung fahren kann. Kennt jemand irgendein gutes Tutorial? Das Spac-Tut von Schattendieb hilft mir eben nicht weiter weil das irgendwie zu kompliziert ist da es einfach zu viel beinhaltet, was für mich überflüssig ist... (Zum Beispiel das mit mit den Entfernungen der Sterne) | ||
D2006Administrator |
So, Mai 20, 2007 15:15 Antworten mit Zitat |
|
---|---|---|
Schau mal hier:
https://www.blitzforum.de/scen...rch=winkel Hab extra mein Tut wieder online gestellt... |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
Nichts95 |
So, Mai 20, 2007 15:54 Antworten mit Zitat |
|
---|---|---|
Also wenn ich diese Tuts richtig verstehe werden die mir wohl nicht helfen, denn bei mir bewegt sich der Hintergrund, da die Fläche sehr groß sein soll und bei den Tuts wird eben kein Scrolling benutzt... Das einzige was mir helfen könnte war im Tutorial "Winkel" am Anfang, allerdings war das nur für 8 Richtungen und ich bräuchte sowas eben für 360 und mit bewegendem Hintergrund | ||
D2006Administrator |
So, Mai 20, 2007 16:52 Antworten mit Zitat |
|
---|---|---|
Das Tutorial zeigt dir, wie man ein Objekt (Spieler) bewegen kann. Das Problem, was du nun anscheinend hast, hat damit nicht viel am Hut.
Scrolling passiert unabhängig von den Bewegungen der Spieler. Das heißt, du veränderst die Variablen genauso. Nur bei der Ausgabe, also dem Zeichnen auf dem Bildschirm, kommt das Scrolling hinzu. Dafür empfehle ich die Einführung zwei neuer Variablen. Zum Beispiel cam_x# und cam_y#. Diese speichern die linke obere Ecke der "Kamera". Wenn also beide 0 sind, ist es ganz normal, wie ohne Scrolling. Jegliche Ausgabe (Bilder zeichnen) wird dann mit den beiden Variablen verrechnet: Code: [AUSKLAPPEN] DrawImage bild,camx#+x#,camy#+y#
Wenn die "Kamera" immer den Spieler in der Mitte haben soll, kann man das so lösen: Code: [AUSKLAPPEN] camx# = (4*camx# + (-x#+400)) / 5.0
camy# = (4*camy# + (-y#+300)) / 5.0 (x und y sind die Korrdinaten des gewünschten Objekts, also zB des Spielers) Hier wird die vierfache alte Kameraposition mit der "neue" verrechnet und dann durch 5 geteilt. Das sorgt dafür, dass die Kamera "sanft" dem Objekt folgt und nicht ruckartig draufklebt. Die Parameter dafür können natürlich nach Belieben angepasst werden. Wichtig sind noch die 400 und die 300. Das ist Auflösungsabhängig. Ich nutzte in dem Fall eine Auflösung von 800x600 Pixel. Man muss halt jeweils die Hälfte dazu addieren. Würde man dies nicht tun, so wäre das Objekt dann links oben zu sehen. Vorsicht: an anderen Stellen musst du auch auf das Scrolling aufpassen! Zum Beispiel, bei der Berechnung, ob ein Objekt zu sehen ist. Wenn mir mal arg langweilig ist, schreib ich dazu auch mal ein Tutorial... |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
Nichts95 |
Mo, Mai 21, 2007 16:10 Antworten mit Zitat |
|
---|---|---|
Ok, bisher funktioniert alles ohne Fehlermeldung^^
Für mich ein Grund zum Feiern^^ Jetzt ist nur die Frage wie ich es je nach Richtung schaffe den Hintergrund zu bewegen! Denn ich kann ja nicht einfach: Code: [AUSKLAPPEN] If Keydown (XXX) Then xposition+4 schreiben. Dann würde der Winkelgrad egal sein, das Auto würde immer in die "X-Richtung" fahren... |
||
Progger93 |
Mo, Mai 21, 2007 16:17 Antworten mit Zitat |
|
---|---|---|
Probiers mal so:
Code: [AUSKLAPPEN] if keydown(203) then winkel=winkel-1 if keydown(205) then winkel=winkel+1 if keydown(200) then geschwindigkeit=geschwindigkeit+1 if keydown(208) then geschwindigkeit=geschwindigkeit-1 if winkel>360 then winkel=0 if winkel<0 then winkel=360 x=x+cos(Winkel)*geschwindigkeit y=y+sin(Winkel)*geschwindigkeit ist noch etwas zu schnelle Beschleunigung EDIT: So besser |
||
- Zuletzt bearbeitet von Progger93 am Mo, Mai 21, 2007 16:27, insgesamt einmal bearbeitet
Tankbuster |
Mo, Mai 21, 2007 16:26 Antworten mit Zitat |
|
---|---|---|
Zitat: if winkel<>360 then winkel=0
Musst du in Zitat: if winkel>360 then winkel=0
ändern |
||
Twitter
Download Jewel Snake! Windows|Android |
Nichts95 |
Mo, Mai 21, 2007 17:06 Antworten mit Zitat |
|
---|---|---|
Also, irgendwie kann ich mich - wie vorher - nur drehen... Hier mein gesamter Code:
Code: [AUSKLAPPEN] Graphics 800,600,16,1 ;Grafische Dinge^^ SetBuffer BackBuffer() TFormFilter 1 AutoMidHandle 1 SeedRnd MilliSecs() Global camx# ;Kamera X-Position Global camy# ;Kamera Y-Position Dim sp_grafik(360) Global hintergrund1 = LoadImage("grafiken\boden.bmp") ;"Boden" wird geladen - nichts anderes als der Hintergrund^^ For gr=0 To 359 sp_grafik(gr)=LoadImage("grafiken\auto.bmp") ;Grafik der Autos wird geladen RotateImage sp_grafik(gr),gr ;Auto wird gedreht Cls DrawBlock sp_grafik(gr),400,300 ;Auto wird positioniert Flip Next Type player Field x#,y#,grad# ;Variablen fürs Auto... Field spx#,spy#,maxspeed#,wendigkeit#,beschleunigung# End Type Global spieler.player=New player spieler\maxspeed#=5 spieler\beschleunigung#=0.05 spieler\wendigkeit#=2 Origin 400,300 While Not KeyHit(1) ;Hauptschleife hintergrund1() steuerung() spieler_versetzten() spieler_malen() kamera() Flip Wend End Function steuerung() ;Berechnungen vom Space-Tut von Schattendieb die iich abgeguckt habe^^ If KeyDown(203)Then spieler\grad#=spieler\grad-spieler\wendigkeit# If KeyDown(205)Then spieler\grad#=spieler\grad+spieler\wendigkeit# If spieler\grad#>=360 Then spieler\grad#=spieler\grad# Mod 360 If spieler\grad#<0 Then spieler\grad#=360+spieler\grad# If spieler\spx#<Cos(spieler\grad#)*spieler\maxspeed# Then spieler\spx#=spieler\spx#+Abs(Cos(spieler\grad#)*spieler\beschleunigung#) If spieler\spx#>Cos(spieler\grad#)*spieler\maxspeed# Then spieler\spx#=spieler\spx#-Abs(Cos(spieler\grad#)*spieler\beschleunigung#) If spieler\spy#<Sin(spieler\grad#)*spieler\maxspeed# Then spieler\spy#=spieler\spy#+Abs(Sin(spieler\grad#)*spieler\beschleunigung#) If spieler\spy#>Sin(spieler\grad#)*spieler\maxspeed# Then spieler\spy#=spieler\spy#-Abs(Sin(spieler\grad#)*spieler\beschleunigung#) End Function Function spieler_versetzten() spieler\x#=spieler\x#+spieler\spx# spieler\y#=spieler\y#+spieler\spy# End Function Function spieler_malen() DrawImage sp_grafik(Int(spieler\grad#)),0,0 End Function Global winkel Global geschwindigkeit Global yh# Global xh# Function hintergrund1() ;Und hier ist eben das was ihr mir gesagt habt^^ TileBlock hintergrund1, camx#+x#, camy#+y# If KeyDown(203) Then winkel=winkel-1 If KeyDown(205) Then winkel=winkel+1 If KeyDown(200) Then geschwindigkeit=geschwindigkeit+1 If KeyDown(208) Then geschwindigkeit=geschwindigkeit-1 If winkel>360 Then winkel=0 If winkel<0 Then winkel=360 x=x+Cos(Winkel)*geschwindigkeit y=y+Sin(Winkel)*geschwindigkeit End Function Function kamera() camx# = (4*camx# + (-x#+400)) / 5.0 camy# = (4*camy# + (-y#+300)) / 5.0 ;Und hier noch das mit dem Hintergrund damit das Auto immer;in dem Mitte bleibt End Function Edititiert:Hab es jetzt edietiert mit Kommentaren! |
||
- Zuletzt bearbeitet von Nichts95 am Mo, Mai 21, 2007 17:55, insgesamt 2-mal bearbeitet
Progger93 |
Mo, Mai 21, 2007 17:37 Antworten mit Zitat |
|
---|---|---|
ich hab eine bitte. könntest du deinen code mal mit ; auskommentieren
er ist ziemlich unübersichtlich |
||
Progger93 |
Mo, Mai 21, 2007 18:04 Antworten mit Zitat |
|
---|---|---|
Noch 2 Dinge
1.) Es hilft nichts fremde Proggrammcodes einfach nur Abzuscreiben denn man lernt nichts dabei 2.)Dein code ergibt keinen sinn da mein Beispiel eben nur ein Beispiel ist und (noch) nicht in deinen Code hineinpasst. |
||
BladeRunnerModerator |
Mo, Mai 21, 2007 19:10 Antworten mit Zitat |
|
---|---|---|
Wie wäre es mit Nutzen des EDIT-Buttons ?
Danke. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Matthias |
Di, Mai 22, 2007 15:09 Antworten mit Zitat |
|
---|---|---|
Hay. Ich habe dir mal ein Beispiel gemacht. Autos auf einem TilesMap. Mit einem kleinen TilesEditor. Einfach "s" für Speichern drücken und beim nästen mal den SchnellEditor deaktivieren. Dann wird das Map automatich geladen.
Die Gegner AutoKI ist nur andeutungsweise vorhanden. (Will dir ja nicht den ganzen Spass nehmen) Die Datein habe ich im Archiv hochgeladen. Link: https://www.blitzforum.de/upload/file.php?id=1538 Code: [AUSKLAPPEN] Global ScreenX=800,ScreenY=600 Graphics ScreenX,ScreenY,32,2 Global PlayerXPos#,PlayerYPos# Dim RoadTiles(20),RoadMiniT(20) Dim RoadMap(1000,1000) Dim AutosImg(3,360) TFormFilter 0 LoadAutos() LoadRoadTiles() SetBuffer BackBuffer() SchnellEditor() LoadMap() Type Autos Field XPos# Field YPos# Field Wink# Field IstSpeed# Field MaxSpeed Field Besch# Field Typ Field Player$ Field DrehSpeed# End Type NeuesAuto(300,300,0,10,.1,2,0,"Player") NeuesAuto(340,300,0,10,.1,20,1,"AutoKI") Repeat: Select MilliSecs()>Timer+10:Case 1 Timer=MilliSecs() AufbTilesMap() UpdatePlayer() Flip End Select Until KeyDown(1)=1 End Function NeuesAuto(X,Y,Wink#,MSp,Be#,DSp#,Typ,Spie$) A.Autos=New Autos A\XPos=X:A\YPos=Y:A\Wink=Wink A\MaxSpeed=MSp A\Besch=Be A\Typ=Typ A\Player=Spie$ A\DrehSpeed=DSp End Function Function UpdatePlayer() ScrX=ScreenX/2:ScrY=ScreenY/2 For A.Autos=Each Autos Select A\Player:Case "Player":PlayerStrg(A.Autos) PlayerXPos=A\XPos:PlayerYPos=A\YPos Default:AutoKI(A.Autos) Select A\IstSpeed<0:Case 1:A\IstSpeed=0:End Select :End Select A\Wink=A\Wink Mod 359:If A\Wink<0 A\Wink=359+A\Wink Select A\IstSpeed>A\MaxSpeed:Case 1:A\IstSpeed=A\MaxSpeed:End Select A\XPos=A\XPos-Sin(A\Wink)*A\IstSpeed A\YPos=A\YPos+Cos(A\Wink)*A\IstSpeed W=Floor((A\Wink)/5) Select A\Player:Case "Player": DrawImage AutosImg(A\Typ,W*5),ScrX,ScrY Default PX#=A\XPos-PlayerXPos PY#=A\YPos-PlayerYPos DrawImage AutosImg(A\Typ,W*5),ScrX+PX,ScrY+PY End Select Next End Function Function PlayerStrg(A.Autos) D#=A\DrehSpeed*(A\IstSpeed/Float(A\MaxSpeed)) Select KeyDown(203):Case 1:A\Wink=A\Wink-D:End Select Select KeyDown(205):Case 1:A\Wink=A\Wink+D:End Select Select KeyDown(200):Case 1:A\IstSpeed=A\IstSpeed+A\Besch:End Select Select KeyDown(208):Case 1:A\IstSpeed=A\IstSpeed-A\Besch:End Select ;AppTitle A\IstSpeed+" "+A\Wink End Function Function AutoKI(A.Autos) SoWink=ATan2(PlayerXPos-A\XPos,PlayerYPos-A\Ypos)*-1 Select A\Wink+A\DrehSpeed<SoWink:Case 1:A\Wink=A\Wink+A\DrehSpeed A\IstSpeed=A\IstSpeed-A\Besch:Return:End Select Select A\Wink-A\DrehSpeed>SoWink:Case 1:A\Wink=A\Wink-A\DrehSpeed A\IstSpeed=A\IstSpeed-A\Besch:Return:End Select A\IstSpeed=A\IstSpeed+A\Besch End Function Function AufbTilesMap() TW=ImageWidth(RoadTiles(0)):TAnX=(ScreenX/TW)+1 TAnY=(ScreenY/TW)+1 SX=PlayerXPos-ScreenX/2 SY=PlayerYPos-ScreenY/2 MX=SX/TW:MY=SY/TW QX=SX-MX*TW:QY=SY-MY*TW For IX=-1 To TAnX:For IY=-1 To TAnY: NX=IX+MX NY=IY+MY Select NX>-1 And NY>-1:Case 1 DrawBlock RoadTiles(RoadMap(NX,NY)),IX*TW-QX,IY*TW-QY Default DrawBlock RoadTiles(0),IX*TW-QX,IY*TW-QY End Select Next:Next End Function Function LoadRoadTiles():For I=0 To 6:RoadTiles(I)=LoadImage("Road"+I+".jpg") RoadMiniT(I)=CopyImage(RoadTiles(I)):ResizeImage RoadMiniT(I),32,32 ;ResizeImage RoadTiles(I),128,128 :Next End Function Function SchnellEditor() TW=ImageWidth(RoadMiniT(0)):TAnX=ScreenX/TW:TAnY=ScreenY/TW Repeat ;-------Map Aufbau------------- For IX=0 To TAnX:For IY=0 To TAnY DrawBlock RoadMiniT(RoadMap(IX+MapX,IY+MapY)),IX*TW,IY*TW Next:Next ;--------Map Rollen----- Select KeyDown(200) And MapY>0:Case 1:MapY=MapY-1:Warte=150:End Select Select KeyDown(208) And MapY<900:Case 1:MapY=MapY+1:Warte=150:End Select Select KeyDown(203) And MapX>0:Case 1:MapX=MapX-1:Warte=150:End Select Select KeyDown(205) And MapX<900:Case 1:MapX=MapX+1:Warte=150:End Select ;--------------Map--Laden/Speichern-------- Select KeyHit(31):Case 1:File=WriteFile("Map.Dat"):For IX=0 To 999 For IY=0 To 999:WriteByte(File,RoadMap(IX,IY)):Next:Next:CloseFile File End Select:Select KeyHit(38):Case 1:LoadMap():End Select ;"-----Road Tiles Auswählen/Setzen--------" Select MouseX()>ScreenX-TW:Case 1:Select MouseDown(1):Case 1 RoadMack=(MouseY()/TW)+RoadLisAnf:End Select Default:MX=MouseX()/TW:MY=MouseY()/TW Select MouseDown(1):Case 1:RoadMap(MX+MapX,MY+MapY)=RoadMack:End Select Select MouseDown(2):Case 1:RoadMap(MX+MapX,MY+MapY)=0:End Select MX=MX*TW:MY=MY*TW:Rect MX-1,MY+TW-9,10,10: Rect MX+TW-9,MY-1,10,10:Rect MX+TW-9,MY+TW-9,10,10 Rect MX-1,MY-1,10,10:DrawBlock RoadMiniT(RoadMack),MX,MY End Select ;----AuswahlListe Auf/Ab Rollen (Bild Auf/Ab Taste) Select KeyHit(201)=1 And RoadLisAnf>0:Case 1 RoadLisAnf=RoadLisAnf-1:End Select Select KeyHit(209):Case 1 RoadLisAnf=RoadLisAnf+1:End Select ;"Tiles AuswahlListe-Anzeigen--------- I=RoadLisAnf:Y=0:X=ScreenX-TW While RoadMiniT(I)<>0:DrawBlock RoadMiniT(I),X,Y Select RoadMack:Case I:Rect X,Y,TW-1,TW-1,0:End Select Y=Y+TW:I=I+1:Wend ;--Grauer Balken Color 192,192,192:Rect ScreenX-TW-10,0,10,ScreenY:Color 255,255,255 Text 10,10,"XPos: "+MapX:Text 10,25,"YPos: "+MapY Flip:Delay Warte:Warte=0 Until KeyDown(1)=1 End End Function Function LoadAutos() For I=0 To 1:Image=LoadImage("Auto"+I+".png"):MidHandle Image For C=0 To 359 Step 5 AutosImg(I,C)=CopyImage(Image) RotateImage AutosImg(I,C),C:Next Next End Function Function LoadMap():File=ReadFile("Map.Dat"):For IX=0 To 999 For IY=0 To 999:RoadMap(IX,IY)=ReadByte(File):Next:Next CloseFile File:End Function Mfg Matthias Und noch viel Erfolg bei diesem Projeckt |
||
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group