jump 'n' run
Übersicht

OlioBetreff: jump 'n' run |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo zusammen
ich hab sowas wie ein jump & run game programmiert jetz hab ich folgendes problem ich habe eine 40 - 40 map erstellt und zeichne die auf den Bildschirm das problem ist drawimage zeichnet auch die bilder ein die gar nicht auf dem bildschirm zusehen sind und das bremst mächtig und ist ja auch unnütz wie kann ich nur die bilder zeichnen die auf dem bildschirm zusehen sind?? |
||
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Einfach die Bilder zeichnen, deren Position innerhalb von 0,0 und deiner Bildschirmauflösung liegt ne? Edit: Natürlich auch die Bilder welche teilweise in den Bildschirm "hineinragen". Also deren Koordinaten zwar kleiner als 0,0/maxX,maxY sind, aber nicht größer bzw gleich der Breite/Höhe deines Tiles. grüße |
||
http://bl4ckd0g.funpic.de |
- Zuletzt bearbeitet von David am Do, Okt 14, 2004 11:50, insgesamt einmal bearbeitet
Olio |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wie meinst du das???
man kann mit der figur im ganzen feld herumhüpfen. edit: ich hab irgendwie einen knoten versteh es so halbwegs kann mir abe keinen code draus machen |
||
![]() |
sbrog |
![]() Antworten mit Zitat ![]() |
---|---|---|
if tilex >0-tilegröße and tilex <bildschirmauflösungx and tiley >0-tilegröße and tiley <bildschirmauflösungy
drawimage tile,tilex,tiley endif |
||
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Hier mal bisschen Pseudocode, vielleicht verstehst dus dann besser: Code: [AUSKLAPPEN] const TILE_WIDTH = 32 const TILE_HEIGHT = 32 for Tile.currTile = each Tile if (RectsOverlap( currTile.x, currTile.y, TILE_WIDTH, TILE_HEIGHT, -TILE_WIDTH, -TILE_HEIGHT, ScreenWith, ScreenHeight ) ) then DrawImage( currTile.image, currTile.x, currTile.y ) endif next Ich habs nicht getestet aber ich denke theoretisch müsste es so funktionieren, oder ich hab noch nen Denkfehler drinn. ![]() grüße |
||
http://bl4ckd0g.funpic.de |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
@David: Er kommt mit Scrolling noch nicht klar und da haust Du ihm fehlerhaften Type-Code (Syntaxfehler, Funktion nicht getestet) um die Ohren? Nicht gerade die feine englische ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Olio |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hier noch der code zum zeichnen
Function Draw() For y = 0 To hohe For x = 0 To breite If map(x,y) = 1 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,0,32,32 End If If map(x,y) = 2 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,32,32,32 End If If map(x,y) = 3 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,64,32,32 End If If map(x,y) = 4 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,160,32,32 End If If map(x,y) = 5 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,96,32,32 End If If map(x,y) = 6 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,128,32,32 End If Next Next End Function edit: ich raffs immernoch nid |
||
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
@Hubsi: Wo steht das er mit dem Scrolling nicht klar kommt? Außerdem steht über meinem Code "Pseudocode". Ich hab die Syntax eben etwas an die von BlitzBasic angepaßt. @Olio: Schau dir die Onlinehilfe von RectOverlap an und denk mal ganz scharf nach, was für Kriterien ein Tile erfüllen muß wenn es NICHT auf dem Bildschirm sichtbar ist! grüße |
||
http://bl4ckd0g.funpic.de |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Olio du machst sowieso nicht gerade die schnellsten befehle!
nuntzte Loadanimimage, um Tiles zu laden, und dann machste Drawimage und, das Frame ist dann die nummer, des images! |
||
between angels and insects |
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] for x = 0 to GraphicsWidth()/32 for y = 0 to GraphicsHeight()/32 |
||
Olio |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@jan
biste sicher dass das die schnellere variante zum zeichnen ist??? @david: würde deine Variante nicht nur funktionieren wenn ich die tiles in types gespeichert hätte. ich habe eine map und lese dann die nummern jedes mal aus und zeichne sie. |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, weil sie dann nur gezeichnet werden, und nciht "ausgeschnitten". | ||
between angels and insects |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Function Draw()
For X = Offeset_X/32-1 To Offeset_X/32+Graphicswidth()/32+1 For Y = Offeset_Y/32-1 To Offeset_Y/32+Graphicsheight()/32+1 if X < hohe And y < breite then DrawImage sachen, x*32 - Offset_x, y*32 - Offset_y,map(x,y) endif Next Next End Function |
||
between angels and insects |
Olio |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
OK ich poste mal den code
ich weiss das nicht alles ideal übersichtlich ist. Code: [AUSKLAPPEN] Graphics 832,608,16,2
AppTitle "Pingu Game" SetBuffer BackBuffer() frametimer = CreateTimer (120) ClsColor 0, 0, 255 ;Gfx laden Global sachen = LoadImage ("sachen.bmp") MaskImage sachen, 0,255,0 Global dude = LoadImage ("figur4.bmp") MaskImage dude, 255,0,255 Global fischbild = LoadImage("fischbild.bmp") MaskImage fischbild ,0,255,0 ;Variablen und Constante bestimmen Global Player_pos_x = 416 Global Player_pos_y = 304 Global Player_temp_y# = 0 Global jump = False Global startzeit = MilliSecs() Global countown Global Offset_x, Offset_y Global punkte = 0 Global breite = 39 Global hohe = 39 Const rauf = 200, runter = 208, rechts = 205, links = 203, space = 57 ;Kartendaten lesen Dim map (breite + 1,hohe + 1) ;Restore mapdata ;For y=0 To 18; ;For x=0 To 3 1 ; Read map(x,y) ; If map(x,y) = 8 Then ; Player_pos_x = x*32 - Offset_x ; Player_pos_y = y*32 - Offset_y ; map(x,y) = 0 ; End If ;Next ;Next Restore mapdata For y = 0 To hohe For x = 0 To breite Read map(x,y) If map(x,y) = 7 Then info.fisch = New fisch info.fisch\x = x * 32 info.fisch\y = y * 32 End If If map(x,y) = 7 Then map(x,y) = 0 Next Next Type fisch Field x,y End Type ;Die Hauptschleife Repeat Cls WaitTimer (frametimer) Fischmalen() DrawMap() Movedude() DoJump() DrawPlayer() Einsammeln() Zeit(30) Flip Until KeyHit (1) End ;Functionen Function Fischmalen() For info.fisch = Each fisch DrawImage fischbild,info.fisch\x - Offset_x,info.fisch\y - Offset_y Next Text 100,100,punkte,0,0 End Function Function Einsammeln() For info.fisch = Each fisch If ImagesCollide(fischbild,info.fisch\x - Offset_x,info.fisch\y -Offset_y,0,dude,player_pos_x, player_pos_y,0) Then Delete info.fisch punkte = punkte + 20 End If Next End Function Function DrawMap() For y = 0 To hohe For x = 0 To breite If map(x,y) = 1 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,0,32,32 End If If map(x,y) = 2 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,32,32,32 End If If map(x,y) = 3 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,64,32,32 End If If map(x,y) = 4 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,160,32,32 End If If map(x,y) = 5 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,96,32,32 End If If map(x,y) = 6 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,128,32,32 End If Next Next End Function Function MoveDude() If KeyDown(links) Then If map((Player_pos_x - 1 + Offset_x) /32,(Player_pos_y + 0 + Offset_y) /32)=0 And map((Player_pos_x - 1 + Offset_x) /32,(Player_pos_y + 31 + Offset_y) /32)=0 Then; _x + 32) /32,(Player_pos_y + 31) beim ersten weil sonst figur an decke ruckt Offset_x = Offset_x -4 ;If Offset_x =< (-breite * 16) Then Offset_x = (-breite * 16) + 4 EndIf ElseIf KeyDown(rechts) Then If map((Player_pos_x + 32 + Offset_x) /32,(Player_pos_y + 0 + Offset_y) /32)=0 And map((Player_pos_x + 32 + Offset_x) /32,(Player_pos_y +31 + Offset_y) /32)=0 Then Offset_x = Offset_x +4 ;If Offset_x => (breite * 16) Then Offset_x = ((breite * 16) - 4) EndIf EndIf End Function Function DoJump() ;Überprüft ob Taste Space gedrückt wurde If KeyDown (space) And map((Player_pos_x + 0 + Offset_x) /32,(Player_pos_y - 1 + Offset_y) /32)=0 And map((Player_pos_x + 31 + Offset_x) /32,(Player_pos_y - 1 + Offset_y) /32)=0 Then If jump = False jump = True Player_temp_y = 11 EndIf EndIf ;falls Player nach oben gegen Mauer springt, fällt er zurück If map((Player_pos_x + 0 + Offset_x) /32,(Player_pos_y - 1 + Offset_y) /32)<>0 Or map((Player_pos_x + 31 + Offset_x) /32,(Player_pos_y - 1 + Offset_y) /32)<>0 And jump = True Then jump = False Offset_y = Offset_y + 1 ;6;muß um eins tiefer gesetzt werden, da sonst die Figur hängen bleibt EndIf ;die eigentliche Sprungroutine If jump = True Then Player_temp_y = Player_temp_y -0.33 Offset_y = Offset_y - Player_temp_y If Player_temp_y =< 0 Then If map((Player_pos_x + 0 + Offset_x) /32,(Player_pos_y + 31 + Offset_y) /32)<>0 Or map((Player_pos_x + 31 + Offset_x) /32,(Player_pos_y + 31 + Offset_y) /32)<>0 Then jump = 0 temp = (Player_pos_y + Offset_y) /32 Offset_y = (temp *32) - Player_pos_y EndIf EndIf EndIf ;Gravity If jump = False Then If map((Player_pos_x + 0 + Offset_x) /32,(Player_pos_y + 32 + Offset_y) /32)=0 And map((Player_pos_x + 31 + Offset_x) /32,(Player_pos_y + 32 + Offset_y) /32) = 0 Then jump = True Player_temp_y = 0 EndIf EndIf ;sorgt dafür, das die Figur nicht aus den Himmel schießt If Offset_y < -300 Then Offset_y = -300 jump = True Player_Temp_y = 0 EndIf ;If Offset_y => 296 Then ; Offset_y = 296 ; jump = False ;EndIf End Function Function DrawPlayer() DrawImage dude, Player_pos_x, Player_pos_y End Function Function Zeit(warten) ;zeit = MilliSecs() ;countown = warten - ((zeit-startzeit) / 1000) ;Text 100,100,countown,0,0 ;If countown = 0 And info.fisch = Null Then ;End ;End If End Function .mapdata Data 2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 data 2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 data 2,2,2,2,2,2,2,2,2,2,2,2,1,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,1,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 Data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,1,1,1,7,7,7,7,7,7,7,7,7,7,7,2,7 Data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7,7,7,7,7,7,2,7 Data 2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 Data 2,2,2,2,7,7,7,7,7,7,7,7,7,7,1,1,1,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,1,1,1,1,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,1,0,7,7,7,7,7,7,7,7,7,7,7,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,7 Data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,1,7 Data 2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,1,7 Data 2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,7 Data 2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 data 2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 Data 2,2,2,2,2,2,2,2,2,2,2,2,1,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7,7,7,7,7,7,7,7,1,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 Data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 Data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7,7,7,7,7,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,1,1,1,7,7,7,7,7,7,7,7,7,7,7,2,7 Data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 Data 2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 Data 2,2,2,2,7,7,7,7,7,7,7,7,7,7,1,1,1,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,1,1,1,1,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,1,0,7,7,7,7,7,7,7,7,7,7,7,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,2,7 data 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,7 Data 2,2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 Data 2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 Data 2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7 Data 2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,1 Data 2,2,2,2,2,2,2,2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,1 |
||
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Und warum nimmst du nicht einfach Types? Dann wird dein Code viel übersichtlicher, leichter zu lesen und es wird für dich leichter sowas zu programmieren! Es geht auch anders, aber manche denken halt: "warum leicht, wenns auch schwehr geht" ne???? ![]() grüße |
||
http://bl4ckd0g.funpic.de |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
David hat Folgendes geschrieben: @Hubsi: Wo steht das er mit dem Scrolling nicht klar kommt? Außerdem steht über meinem Code "Pseudocode". Ich hab die Syntax eben etwas an die von BlitzBasic angepaßt. Olio hat Folgendes geschrieben:das problem ist drawimage zeichnet auch die bilder ein die gar nicht auf dem bildschirm zusehen sind und das bremst mächtig und ist ja auch unnütz Das gehört für mich zu Scrolling dazu. Hab mich etwas undeutlich ausgedrückt ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Achso, nadann... Aber ich glaub Olio fehlen noch viele grundlegende Dinge, sonst müsste er die Theorie so langsam begriffen haben... grüße |
||
http://bl4ckd0g.funpic.de |
Olio |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hab nun eine möglichkeit (ob sie schneller ist weiss ich nicht)
Code: [AUSKLAPPEN] Function DrawMap()
For y = (((player_pos_y + offset_y) / 32) - 13) To (((player_pos_y + offset_y) / 32) + 13) For x = (((player_pos_x + offset_x) / 32) - 13) To (((player_pos_x + offset_x) / 32) + 13) If map(x,y) = 1 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,0,32,32 End If If map(x,y) = 2 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,32,32,32 End If If map(x,y) = 3 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,64,32,32 End If If map(x,y) = 4 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,160,32,32 End If If map(x,y) = 5 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,96,32,32 End If If map(x,y) = 6 Then DrawImageRect sachen, x*32 - Offset_x, y*32 - Offset_y,0,128,32,32 End If Next Next End Function nur das problem ist wenn die figur zuweit am rand ist heisst es logischerweise "array index out of bounds" ich nehme an das einfachste ist einen genug dicken rand ums feld zu machen |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group