Isometrie, mehr oder weniger [BB2D]
Übersicht

![]() |
KabelbinderSieger des WM-Contest 2006Betreff: Isometrie, mehr oder weniger [BB2D] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Ich habe mich neulich mal an Isometrie herangewagt. Dabei habe ich mich zwar nicht genau an die Vorgaben und Abmessungen gehalten, das Ergebnis kann sich aber finde ich trotzdem sehen lassen. Das ist dabei herausgekommen: http://home.arcor.de/platzvers...metrie.rar Kann sein, dass man zufällig am Anfang ein leeres Feld erwischt und runterfällt. Dann einfach neu starten. Die Probleme, dies nocht gibt: Die größe der Karte muss in x- und y-Richtugn dieselbe sein, sonst gibt es komischerweise (allerdings nur im Debugmodus) "Array Index out of Bounds" und angezeigt wird eigentlich eine Funktion. Edit: Achso, kein Problem: Code: [AUSKLAPPEN] AppTitle "Isometrie"
Graphics 640,480,16,2 SetBuffer BackBuffer() SeedRnd MilliSecs() Const ledge = 29 Const redge = 29 Const issue = 1 Const umlaufzeit = 13 Const tilemax = 5 Global scrollx,scrolly,xcor#,ycor#,frame,dir,timer,speed#,zspeed#,slip,ebene,zcor Dim isomap(ledge,redge,issue) For i = 0 To redge For j = 0 To ledge For k = 1 To issue isomap(j,i,k)=Rand(0,5) Next Next Next Global isoset = LoadAnimImage("img/iso/t_tiles.bmp",60,40,0,tilemax+1) MaskImage isoset,255,0,255 MidHandle isoset Global lfin = LoadImage("img/iso/l_flanke.bmp") MaskImage lfin,255,0,255 MidHandle lfin Global rfin = LoadImage("img/iso/r_flanke.bmp") MaskImage rfin,255,0,255 MidHandle rfin Global char = LoadAnimImage("img/char.bmp",30,30,0,64) MaskImage char,255,0,255 MidHandle char Function isox#(zx#,zy#) Return (zx*3-zy*3) End Function Function isoy#(zx#,zy#) Return (zy*2+zx*2) End Function Function draw() ;Dahinter For y = 0 To ledge For x = 0 To redge For k = 0 To issue If ebene>=k Then DrawImage isoset,isox(x,y)*10-scrollx,isoy(x,y)*10-scrolly,isomap(x,y,k) If x=redge Then If isomap(x,y,k)<>0 Then DrawImage rfin,isox(x,y)*10-scrollx,isoy(x,y)*10-scrolly Else If isomap(x+1,y,k)=0 Then If isomap(x,y,k)<>0 Then DrawImage rfin,isox(x,y)*10-scrollx,isoy(x,y)*10-scrolly EndIf EndIf If y=ledge Then If isomap(x,y,k)<>0 Then DrawImage lfin,isox(x,y)*10-scrollx,isoy(x,y)*10-scrolly Else If isomap(x,y+1,k)=0 If isomap(x,y,k)<>0 Then DrawImage lfin,isox(x,y)*10-scrollx,isoy(x,y)*10-scrolly EndIf EndIf EndIf Next Next Next DrawImage char,isox(xcor,ycor)-scrollx,isoy(xcor,ycor)+zcor-scrolly,frame+dir*16 ;Davor For y = 0 To ledge For x = 0 To redge For k = 0 To issue If k>ebene Then DrawImage isoset,isox(x,y)*10-scrollx,isoy(x,y)*10-scrolly,isomap(x,y,k) If x=redge Then If isomap(x,y,k)<>0 Then DrawImage rfin,isox(x,y)*10-scrollx,isoy(x,y)*10-scrolly Else If isomap(x+1,y,k)=0 Then If isomap(x,y,k)<>0 Then DrawImage rfin,isox(x,y)*10-scrollx,isoy(x,y)*10-scrolly EndIf EndIf If y=ledge Then If isomap(x,y,k)<>0 Then DrawImage lfin,isox(x,y)*10-scrollx,isoy(x,y)*10-scrolly Else If isomap(x,y+1,k)=0 If isomap(x,y,k)<>0 Then DrawImage lfin,isox(x,y)*10-scrollx,isoy(x,y)*10-scrolly EndIf EndIf EndIf Next Next Next Text 0,0,isomap(xcor/10,ycor/10,1) Text 0,20,xcor Text 0,30,ycor Text 0,50,Int(xcor/10) Text 0,60,Int(ycor/10) End Function Function steuerung() If KeyDown(200) Then ycor = ycor - speed xcor = xcor - speed If MilliSecs()-timer>30 Then timer = MilliSecs() If frame = 15 Then frame = 0 Else frame = frame + 1 EndIf EndIf dir = 3 EndIf If KeyDown(208) Then ycor = ycor + speed xcor = xcor + speed If MilliSecs()-timer>30 Then timer = MilliSecs() If frame = 15 Then frame = 0 Else frame = frame + 1 EndIf EndIf dir = 1 EndIf If KeyDown(203) Then xcor = xcor - speed ycor = ycor + speed If MilliSecs()-timer>30 Then timer = MilliSecs() If frame = 15 Then frame = 0 Else frame = frame + 1 EndIf EndIf dir = 2 EndIf If KeyDown(205) Then xcor = xcor + speed ycor = ycor - speed If MilliSecs()-timer>30 Then timer = MilliSecs() If frame = 15 Then frame = 0 Else frame = frame + 1 EndIf EndIf dir = 0 EndIf End Function Function kamera() scrollx = isox(xcor,ycor) - 320 scrolly = isoy(xcor,ycor) - 240 End Function Function fall() If isomap(xcor/10,ycor/10,1)=0 Then slip = 1 If slip = 1 Then zspeed=zspeed+0.1 zcor = zcor + zspeed zspeed = zspeed * 0.999 EndIf If zcor>20 Then ebene = 0 End Function scrollx = 0 scrolly = 0 speed = 0.5 ebene = 1 slip = 0 Repeat fratim = MilliSecs() If slip = 0 Then steuerung() kamera() fall() draw() If MilliSecs()-fratim>umlaufzeit Then Delay umlaufzeit-(MilliSecs()-fratim) Flip Cls Until KeyHit(1) |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
- Zuletzt bearbeitet von Kabelbinder am Di, März 27, 2007 21:57, insgesamt einmal bearbeitet
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
möchte ja nicht der bumann sein, aber kein download-only im codearchiv. | ||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
Tornado11 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Manchmal fällt man durch die Bodenplatten hindurch.-->ungenaue Kollision | ||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
das sieht so aus... weil beim fallen die platten immernoch unter dem mensch gemalt werden... | ||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nene, die Kollision stimmt schon. Das kann man schon an dern Werten oben Links in der Ecke sehen. Das is ne Punkt-Kollision
Und nach dem Fallen müssen zwar einige Platten danach (also davor), andere aber noch davor (also dahinter) gezeichnet werden. So einfach ist es nicht. |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
krux |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
der grafikfehler,dass man sich so lange noch vor den anderen objekten sieht, sollte noch behoben werden. und isometrische charaktergrafik sollte noch erstellt werden. Das ist auch nicht sonderlich schwer einfach das normale Bild in alle diagonalen himmelsrichtungen drehen, und dann auf 50% in y richtung stauchen. | ||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Seit wann geht es bitte im Codearchiv um hübsche Grafik? | ||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Eine Frage dein mensch oder was das sein soll müste doch wenn du schon isometrie haben wilst auch so sein wie der Boden aufdem er steht
Oder nihct ????? |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist völlig egal.
Ich hätte zum testen auch einfach ein weißes Rect nehmen können. Es geht mir im Codearchiv eher um die Strategie und den Code. Hauptsache, das Schema stimmt erstmal. Wir sind hier nicht Projekte-Thread. Mein character ist aus der Vogelperspektive aufgenommen und passt so vom Blickwinkel her nicht so richtig in die Isometrie hinein. In nem Spiel würde ich den dann schon von vorn zeichnen. |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
krux |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
naja schön muss er ja nicht sein, aber schon perspektiwisch richtig, sonst geht das gefühl von isometrie flöten, und schwer ist das ja nun wirklich nicht. Immerhin hat der kern schon füße, die sicherlich mehr aufwand waren, als das teil in richtiger perspektive darzustellen. | ||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist mein Standart-character, den ich immer nehme, wenn ich sowas mache. | ||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wer Blitz3D hat, kann auch auf folgende Methode zurück greifen: Code: [AUSKLAPPEN] Graphics3D 400,400,0,2
SetBuffer BackBuffer() camera=CreateCamera() PositionEntity camera,12,16,-12 RotateEntity camera,30,45,0 CameraProjMode camera,2 CameraZoom camera,.25 light=CreateLight() RotateEntity light,70,30,0 mcube=CreateCube() EntityType mcube,2 HideEntity mcube ball=CreateSphere(16) PositionEntity ball,0,6.5,0 ScaleEntity ball,.25,.25,.25 EntityRadius ball,.25 EntityParent camera,ball EntityType ball,1 Dim cube(48) For z=-3 To 3 For x=-3 To 3 If Rand(10)<>9 cube(pos)=CopyEntity(mcube) PositionEntity cube(pos),x*2,0,z*2 If Rand(20)=1 MoveEntity cube(pos),0,1,0 EntityColor cube(pos),255,Rand(128),0 EntityType cube(pos),2 pos=pos+1 End If Next Next Collisions 1,2,2,2 While Not KeyHit(1) If KeyDown(203) MoveEntity ball,-.02,0,-.02 If KeyDown(205) MoveEntity ball,+.02,0,+.02 If KeyDown(200) MoveEntity ball,-.02,0,+.02 If KeyDown(208) MoveEntity ball,+.02,0,-.02 MoveEntity ball,0,-.05,0 UpdateWorld RenderWorld Flip Wend End Zumindest gibt es hier keine Projektionsfehler als auch sind Schräge Flächen möglich. Allerdings hab ich den Code hier mal schnell geschrieben und ist somit nicht besonders optimiert (jede Fläche ein Surface (bzw. Cube)). Es soll nur eine Möglichkeit zeigen. edit1: Wer ein steileren Winkel haben will, so ändert die Kameraeinstellung wie folgt: Code: [AUSKLAPPEN] PositionEntity camera,12,23,-12
RotateEntity camera,45,45,0 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group