Z Buffer Sorting Problem
Übersicht

![]() |
Xaymarehemals "Cgamer"Betreff: Z Buffer Sorting Problem |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe neuerdings einen echt seltsamen fehler in B3D. Um es genau zu sagen es kotzt mich inzwischen an, da ich nicht weiß warum es passiert.
Ein Bild: Der Code: [AUSKLAPPEN] ;Load the Config-------------------------------------------- Global GrW=1024,GrH=768,GrD=32,GrM=2,Version$="V0.15" LoadConfig() AppTitle "Wenan " + Version$ SeedRnd MilliSecs() ;Init Graphics---------------------------------------------- Graphics3D GrW,GrH,GrD,GrM SetBuffer BackBuffer() HidePointer Timer = CreateTimer(60) ;Includes--------------------------------------------------- Include "ParticleSystem.bb" ;Variables-------------------------------------------------- Global GameState=0,MX,MY,ML,MR Global LastMission$, Mission$ = "Tutorial" Global Pointer,ButtonN,ButtonH,ButtonD Global BitmapFont Global PLX#,PLY#, PSX, PSY Const MapVersionByte = 2 Global MapType, MapW, MapH, UsedTileSet, UsedTileSetFrames, MapVersion, HeaderSize Global MapTiles Global WorldPiv Dim EventText$(999) Dim Briefing$(24) Dim Tip$(9) Tip$(0) = "Mit den Pfeiltasten können sie sich bewegen" Tip$(1) = "Springen können sie mit der Leertaste" Tip$(2) = "Weitsprünge(Umschalt und Leertaste) können bei größeren Lücken helfen" Tip$(3) = "Mit der linken Steuerungs Taste können sie schießen" Tip$(4) = "Manche Waffen haben ein Sekundärfeuermodus. Drücken sie Alt um zwischen den Modi zu wechseln" Tip$(5) = "Im Tutorial werden die Gegner nicht auf Sie schießen" Tip$(6) = "Gegner schießen im Normalfall auf Sie. Vermeiden Sie also Sichtkontakt mit Gegnern" Tip$(7) = "Vermeiden sie Kontakt mit Feuer oder Lava" Tip$(8) = "" Tip$(9) = "" ;Images----------------------------------------------------- Pointer = LoadImage("GFX/Menu/Pointer.png "):MaskImage Pointer,255,0,255 ButtonN = LoadImage("GFX/Menu/Button_Normal.png"):MaskImage ButtonN,255,0,255 ButtonH = LoadImage("GFX/Menu/Button_Hover.png "):MaskImage ButtonH,255,0,255 ButtonD = LoadImage("GFX/Menu/Button_Down.png "):MaskImage ButtonD,255,0,255 BackGround = LoadImage("GFX/Menu/Background.png ") BackGround2 = LoadImage("GFX/Briefing/Background.png") BitmapFont = LoadAnimImage("GFX/Menu/Font.bmp",42,61,0,63):MaskImage BitmapFont,255,0,255 PHB = LoadAnimImage("GFX/Player/HealthBar.png",192,24,0,4):MaskImage PHB,255,0,255 PSB = LoadAnimImage("GFX/Player/StaminaBar.png",192,24,0,4):MaskImage PSB,255,0,255 PAB = LoadAnimImage("GFX/Player/AmmoBar.png",192,24,0,4):MaskImage PAB,255,0,255 ;----Bitmap Font Wizard Global bmpf_frames=62 Dim bmpf_c(bmpf_frames) bmpf_c(0)=48 bmpf_c(1)=49:bmpf_c(2)=50:bmpf_c(3)=51:bmpf_c(4)=52:bmpf_c(5)=53:bmpf_c(6)=54:bmpf_c(7)=55:bmpf_c(8)=56:bmpf_c(9)=57:bmpf_c(10)=48 bmpf_c(11)=65:bmpf_c(12)=66:bmpf_c(13)=67:bmpf_c(14)=68:bmpf_c(15)=69:bmpf_c(16)=70:bmpf_c(17)=71:bmpf_c(18)=72:bmpf_c(19)=73:bmpf_c(20)=74 bmpf_c(21)=75:bmpf_c(22)=76:bmpf_c(23)=77:bmpf_c(24)=78:bmpf_c(25)=79:bmpf_c(26)=80:bmpf_c(27)=81:bmpf_c(28)=82:bmpf_c(29)=83:bmpf_c(30)=84 bmpf_c(31)=85:bmpf_c(32)=86:bmpf_c(33)=87:bmpf_c(34)=88:bmpf_c(35)=89:bmpf_c(36)=90:bmpf_c(37)=97:bmpf_c(38)=98:bmpf_c(39)=99:bmpf_c(40)=100 bmpf_c(41)=101:bmpf_c(42)=102:bmpf_c(43)=103:bmpf_c(44)=104:bmpf_c(45)=105:bmpf_c(46)=106:bmpf_c(47)=107:bmpf_c(48)=108:bmpf_c(49)=109:bmpf_c(50)=110 bmpf_c(51)=111:bmpf_c(52)=112:bmpf_c(53)=113:bmpf_c(54)=114:bmpf_c(55)=115:bmpf_c(56)=116:bmpf_c(57)=117:bmpf_c(58)=118:bmpf_c(59)=119:bmpf_c(60)=120 bmpf_c(61)=121:bmpf_c(62)=122: Dim bmpf_w(bmpf_frames) bmpf_w(0)=27 bmpf_w(1)=18:bmpf_w(2)=28:bmpf_w(3)=27:bmpf_w(4)=27:bmpf_w(5)=27:bmpf_w(6)=26:bmpf_w(7)=25:bmpf_w(8)=27:bmpf_w(9)=26:bmpf_w(10)=27 bmpf_w(11)=30:bmpf_w(12)=29:bmpf_w(13)=29:bmpf_w(14)=31:bmpf_w(15)=27:bmpf_w(16)=26:bmpf_w(17)=32:bmpf_w(18)=30:bmpf_w(19)=11:bmpf_w(20)=23 bmpf_w(21)=32:bmpf_w(22)=26:bmpf_w(23)=37:bmpf_w(24)=28:bmpf_w(25)=31:bmpf_w(26)=28:bmpf_w(27)=32:bmpf_w(28)=30:bmpf_w(29)=28:bmpf_w(30)=27 bmpf_w(31)=29:bmpf_w(32)=30:bmpf_w(33)=42:bmpf_w(34)=31:bmpf_w(35)=32:bmpf_w(36)=30:bmpf_w(37)=30:bmpf_w(38)=29:bmpf_w(39)=29:bmpf_w(40)=31 bmpf_w(41)=27:bmpf_w(42)=26:bmpf_w(43)=32:bmpf_w(44)=30:bmpf_w(45)=11:bmpf_w(46)=23:bmpf_w(47)=32:bmpf_w(48)=26:bmpf_w(49)=37:bmpf_w(50)=28 bmpf_w(51)=31:bmpf_w(52)=28:bmpf_w(53)=32:bmpf_w(54)=30:bmpf_w(55)=28:bmpf_w(56)=27:bmpf_w(57)=29:bmpf_w(58)=30:bmpf_w(59)=42:bmpf_w(60)=31 bmpf_w(61)=32:bmpf_w(62)=30: ;----End ;Sounds----------------------------------------------------- ;Font------------------------------------------------------- NormalFont = LoadFont("", 16) BriefingFont = LoadFont("Times New Roman", 18, 0, 1) ;3D--------------------------------------------------------- Global Player,PlayerB PlTex = LoadAnimTexture("GFX/Player/Player.png", 2, 64, 64, 0, 16) Player = CreateSprite():SpriteViewMode Player,2 ScaleEntity Player, .5, .5, .5 EntityType Player, 1 EntityRadius Player, .25, .4 EntityTexture Player, PlTex, 1 PlayerB = CreateSphere(8, Player) PositionEntity PlayerB, 0, -.5, 0, 1 EntityAlpha PlayerB, 0 EntityType PlayerB, 1 EntityRadius PlayerB, .2, .1 PlayerT = CreateSphere(8, Player) PositionEntity PlayerT, 0, .5, 0, 1 EntityAlpha PlayerT, 0 EntityType PlayerT, 1 EntityRadius PlayerT, .2, .1 Cam = CreateCamera(Player) CameraRange Cam,1,1000 CameraClsMode Cam, 1, 1 ScaleEntity Cam, 2, 2, 2 PositionEntity Cam, 0, 0, -10, 1 Collisions 1, 2, 2, 3 ;Particle Textures------------------------------------------ Global Flare Flare = LoadTexture("GFX/Particle/Flare.png", 2) ;Weapons Ammo = 1 MaxAmmo = 1 Dim WeaponAmmo(4) Dim WeaponMaxAmmo(4) ;Pistol WeaponAmmo(0) = 10 WeaponMaxAmmo(0) = 10 ;Throwing Knife WeaponAmmo(1) = 0 WeaponMaxAmmo(1) = 3 ;MG WeaponAmmo(2) = 0 WeaponMaxAmmo(2) = 60 ;Grenade WeaponAmmo(3) = 0 WeaponMaxAmmo(3) = 3 ;Grenade Launcher WeaponAmmo(4) = 0 WeaponMaxAmmo(4) = 6 ;Main------------------------------------------------------- Repeat MX = MouseX() MY = MouseY() ML = MouseDown(1) MR = MouseDown(2) Select GameState Case 0 ;Intro GameState = 1 Case 1 ;Menu Cls ;Background DrawImage Background, 0, 0 Text 1024-StringWidth(Version$),0,Version$ ;Buttons StartGame = DrawButton(412,484,"Neues Spiel Starten") LoadGame = DrawButton(412,534,"Spiel Fortsetzen") ExitGame = DrawButton(412,584,"Spiel Beenden") ;Buttons Check If StartGame = 2 Color 153,153,204 Rect MX, MY-15, StringWidth("Startet die erste Mission")+4, 19 Color 0,0,0 Rect MX, MY-15, StringWidth("Startet die erste Mission")+4, 19, 0 Color 255,255,255 Text MX+2, MY-13, "Startet die erste Mission" ElseIf StartGame = 1 Mission$ = "Tutorial" LoadBriefing() RandomTipNr = Rand(9) GameState = 2 EndIf If LoadGame = 2 Color 153,153,204 Rect MX, MY-15, StringWidth("Lädt die zuletzt gespielte Mission("+LastMission$+")")+4, 19 Color 0,0,0 Rect MX, MY-15, StringWidth("Lädt die zuletzt gespielte Mission("+LastMission$+")")+4, 19, 0 Color 255,255,255 Text MX+2, MY-13, "Lädt die zuletzt gespielte Mission("+LastMission$+")" ElseIf LoadGame = 1 Mission$ = LastMission$ LoadBriefing() RandomTipNr = Rand(9) GameState = 2 EndIf If ExitGame = 2 Color 153,153,204 Rect MX, MY-15, StringWidth("Beendet dieses Spiel und speichert ihren Fortschritt")+4, 19 Color 0,0,0 Rect MX, MY-15, StringWidth("Beendet dieses Spiel und speichert ihren Fortschritt")+4, 19, 0 Color 255,255,255 Text MX+2, MY-13, "Beendet dieses Spiel und speichert ihren Fortschritt" ElseIf ExitGame = 1 SaveConfig() End EndIf ;Pointer DrawImage Pointer, MX, MY ;Flip & Waittimer Flip 0 WaitTimer Timer Case 2 ;Mission Briefing Cls ;Background DrawImage Background2, 0, 0 Text 1024-StringWidth(Version$),0,Version$ ;Mission Briefing Text Titel BMP_Text 512-BMPWidth(Mission$)/2,64,Mission$ ;Mission Briefing Text SetFont BriefingFont For Lin = 0 To 24 Text 128, 128+Lin*(FontHeight()+5), Briefing$(Lin) Next SetFont NormalFont ;Tip Color 255,255,255 Text 512,768-32,"Tipp: " + Tip$(RandomTipNr), 1, 1 Text 512,768-64,"Lade...", 1, 1 Color 0,0,0 Flip ;Load Mission If LoadMap() = 0 RuntimeError "Crashed due to Errors in the Map" EndIf ;Wait for any key Cls ;Background DrawImage Background2, 0, 0 Text 1024-StringWidth(Version$),0,Version$ ;Mission Briefing Text Titel BMP_Text 512-BMPWidth(Mission$)/2,64,Mission$ ;Mission Briefing Text SetFont BriefingFont For Lin = 0 To 24 Text 128, 128+Lin*(FontHeight()+5), Briefing$(Lin) Next SetFont NormalFont ;Tip Color 255,255,255 Text 512,768-32,"Tipp: " + Tip$(RandomTipNr), 1, 1 Color 0,0,0 BMP_Text(512-BMPWidth("Taste Druecken...")/2, 384, "Taste Druecken...") Flip WaitKey() GameState = 3 Grav# = 0:Jump = 0 Health = 99:Sta# = 99 Ammo = WeaponAmmo(0):MaxAmmo = WeaponMaxAmmo(0) Die = 0 FlushKeys():FlushMouse() Case 3 ;Mission Cls ClearCollisions PositionEntity PlayerB, EntityX(Player), EntityY(Player)-.5, EntityZ(Player), 1 PositionEntity PlayerT, EntityX(Player), EntityY(Player)+.5, EntityZ(Player), 1 Collisions 1, 2, 2, 2 PLX# = EntityX(Player, 1) PLY# = EntityY(Player, 1) A = A + 1 If A = 2 Or A = 4 UpdateParticleSources() ElseIf A = 5 PHBF = Max((PHBF+1), 3) PSBF = Max((PSBF+1), 3) PABF = Max((PABF+1), 3) A = 0 Health = Health - 5 * CheckDeath(PLX, -PLY) If LHealth <> Health PHBF = 0 LHealth = Health EndIf PlFrame2 = (PlFrame2 + 1) Mod 4 EndIf If CheckWater(PLX, -PLY) = 1 If Jump = 1 And Grav# < 0 Grav# = Grav# + .001 ElseIf Jump = 1 Jump = 0 EndIf MoveX = 0:MoveY = 0 Grav# = Grav# + .0001 If KeyDown(31) YSpe# = YSpe# - .0075 MoveY = 1 EndIf If KeyDown(30) = 1 XSpe# = XSpe# - .01 MoveX = 1 PlFrame = PlFrame2 + 7 EndIf If KeyDown(32) = 1 XSpe# = XSpe# + .01 MoveX = 1 PlFrame = PlFrame2 + 11 EndIf If KeyDown(17) YSpe# = YSpe# + .0075 MoveY = 1 Grav# = 0 EndIf If MoveX=0 XSpe#=XSpe#*.75 If MoveY=0 YSpe#=YSpe#*.75 If XSpe# > .05:XSpe# = .05:ElseIf XSpe# < -.05:XSpe# = -.05:EndIf If YSpe# > .04:YSpe# = .04:EndIf TranslateEntity Player, XSpe# * DeltaT#, YSpe# * DeltaT#, 0, 1 Else XSpe# = 0:YSpe# = 0 Grav# = Grav# + .01 Spe# = .075 * DeltaT# If KeyDown(42) And Sta# > .5 Spe# =.125 * DeltaT# EndIf PlFrame = 0 Sta# = Max2((Sta# + .25), 99) If KeyDown(30) = 1 TranslateEntity Player, -Spe#, 0, 0 PlFrame = PlFrame2 If Spe# > .1 Sta = Sta-1 PSBF = 0 EndIf EndIf If KeyDown(32) = 1 TranslateEntity Player, Spe#, 0, 0 PlFrame = PlFrame2 + 3 If Spe# > .1 Sta = Sta-1 PSBF = 0 EndIf EndIf If KeyDown(57) = 1 And Jump = 0 Grav# = -.1 Jump = 1 EndIf EndIf PositionEntity Player, EntityX(Player, 1), EntityY(Player)-(Grav# * DeltaT#), 10 If EntityCollided(PlayerB, 2) > 0 Grav# = 0 Jump = 0 EndIf If EntityCollided(PlayerT, 2) > 0 Grav# = 0 EndIf If Health <= 0 Die = 1 EndIf EntityTexture Player, PlTex, PlFrame UpdateParticles() UpdateWorld RenderWorld If Die = 1 RenderWorld ClearCollisions PositionEntity Player, PLX, PLY, 0, 1 PositionEntity PlayerB, PLX, PLY-.5, 0, 1 FlushKeys() GameState = 4 BMP_Text(512-BMPWidth("Sie sind gestorben")/2,300,"Sie sind gestorben") BMP_Text(512-BMPWidth("Taste Druecken...")/2, 384, "Taste Druecken...") Flip 0 WaitKey() DeleteParticleSources() EndIf DrawImageRect PHB, 0, 768-72, 0, 0, Health*2.56, 24, PHBF DrawImageRect PSB, 0, 768-48, 0, 0, Sta#*2.56, 24, PSBF DrawImageRect PAB, 0, 768-24, 0, 0, Ammo*(256/MaxAmmo), 24, PABF Color 255,255,255 Flip 0 WaitTimer Timer Case 4 ;Mission Report Cls GameState = 0 Flip 0 End Select Forever ;Functions-------------------------------------------------- Function LoadConfig() Local Stream If FileType("Config.CFG") = 1 Stream = ReadFile("Config.CFG") LastMission$ = ReadLine(Stream) CloseFile Stream EndIf End Function Function SaveConfig() Local Stream Stream = WriteFile("Config.CFG") WriteLine Stream, Mission$ CloseFile Stream End Function Function LoadBriefing() Local Lin For Lin = 0 To 24 Briefing$(Lin) = "" Next If FileType("LVL/"+Mission$+".brf") = 1 Stream = ReadFile("LVL/"+Mission$+".brf") For Lin = 0 To 24 Briefing$(Lin) = ReadLine(Stream) Next CloseFile Stream Else Briefing$(0) = "Keine Missionsbeschreibung" EndIf End Function Function LoadMap() ;Load If Not ReadDataFromFile() Then Return False ;Check If MapType < 1 And MapType > 2 Then Return False If Not MapW > 0 Then Return False If Not MapH > 0 Then Return False If UsedTileSet = 0 Then Return False If Not MapVersion = MapVersionByte Then Return False ;Load MapTiles = ReadMapFromFile() If MapTiles = 0 Then Return False ;Events LoadEvents() ;ParticleSources & World CreateParticleSources() GetSpawn() ClearCollisions PositionEntity Player, 0, 0, 0, 1 PositionEntity Player, PSX, -PSY, 10, 1 PositionEntity PlayerB, 0, 0, 0, 1 PositionEntity PlayerB, PSX, -PSY-.5, 10, 1 ;UpdateWorld Collisions 1, 2, 2, 2 CreateWorld() Return True End Function Function ReadDataFromFile() Local Stream, MapTileSet$, TempLoad If FileType("LVL/"+Mission$+".mis") = 1 Stream = ReadFile("LVL/"+Mission$+".mis") MapType = ReadByte(Stream) MapW = ReadShort(Stream) MapH = ReadShort(Stream) MapTileSet$ = ReadString(Stream) If Not UsedTileSet = 0 FreeTexture UsedTileSet TempLoad = LoadImage("GFX/Tileset/"+Trim(MapTileSet$)) Frames = ImageWidth(TempLoad)/64 * ImageHeight(TempLoad)/64 FreeImage TempLoad UsedTileSet = LoadAnimTexture("GFX/Tileset/"+Trim(MapTileSet$), 2, 64, 64, 0, Frames-1) UsedTileSetFrames = Frames SeekFile Stream,31 MapVersion = ReadByte(Stream) HeaderSize = FilePos(Stream) CloseFile Stream Else Return False EndIf Return True End Function Function ReadMapFromFile() Local Stream, MapBank If FileType("LVL/"+Mission$+".mis") = 1 Stream = ReadFile("LVL/"+Mission$+".mis") SeekFile Stream, HeaderSize If Not MapBank = 0 FreeBank MapBank MapBank = CreateBank((MapW*9)*MapH+9) For Pos = 0 To BankSize(MapBank)-9 If Eof(Stream) Exit PokeByte MapBank, Pos, ReadByte(Stream) Next CloseFile Stream Else Return 0 EndIf Return MapBank End Function Function LoadEvents() Local Stream, A If FileType("LVL/"+M$+".vnt") = 1 Stream = ReadFile("LVL/"+M$+".vnt") For A = 0 To 999 If Eof(Stream) Exit EventText$(A) = ReadLine(Stream) Next CloseFile Stream EndIf End Function Type AutoParticleSources Field Han Field EID End Type Function GetSpawn() For Y2 = 0 To MapH-1 For X2 = 0 To MapW-1 EID = PeekShort(MapTiles, Pos+7) Select EID Case 1 PSX = X2 PSY = Y2 End Select Pos = Pos+9 Next Next End Function Function CreateParticleSources() For Y2 = 0 To MapH-1 For X2 = 0 To MapW-1 EID = PeekShort(MapTiles, Pos+7) Select EID Case 10 APS.AutoParticleSources = New AutoParticleSources APS\Han = CreateParticleSource(X2, -Y2-.5, 10) SetParticleSourceTex(APS\Han, Flare) SetParticleSourceColorStart(APS\Han, 255, 255, 51, .25) SetParticleSourceColorEnd(APS\Han, 255, 0, 0, .1) SetParticleSourceLifetime(APS\Han, 2000) SetParticleSourceScale(APS\Han, .5, .25) SetParticleSourceMovement(APS\Han, 90, .01, 90, .01) SetParticleSourceQuadraticSpawn(APS\Han, .9, 0, .9) APS\EID = EID Case 11 APS.AutoParticleSources = New AutoParticleSources APS\Han = CreateParticleSource(X2-.5, -Y2-.125, 10) SetParticleSourceTex(APS\Han, Flare) SetParticleSourceColorStart(APS\Han, 255, 255, 0, .25) SetParticleSourceColorEnd(APS\Han, 255, 0, 0, .25) SetParticleSourceLifetime(APS\Han, 1000) SetParticleSourceScale(APS\Han, .5, .5) SetParticleSourceMovement(APS\Han, 0, .015, 0, .015) SetParticleSourceQuadraticSpawn(APS\Han, 0, .75, 1) APS\EID = EID Case 12 APS.AutoParticleSources = New AutoParticleSources APS\Han = CreateParticleSource(X2-.5, -Y2, 10) SetParticleSourceTex(APS\Han, Flare) SetParticleSourceColorStart(APS\Han, 0, 128, 255, .25) SetParticleSourceColorEnd(APS\Han, 0, 128, 255, .25) SetParticleSourceLifetime(APS\Han, 1000) SetParticleSourceScale(APS\Han, .5, .5) SetParticleSourceMovement(APS\Han, 0, .015, 0, .015) SetParticleSourceQuadraticSpawn(APS\Han, 0, 1, 1) APS\EID = EID End Select Pos = Pos+9 Next Next End Function Function UpdateParticleSources() For APS.AutoParticleSources = Each AutoParticleSources If APS\EID = 10 CreateParticle(APS\Han, 3) SetParticleSourceLifetime(APS\Han, Rand(1000, 3000)) ElseIf APS\EID = 11 CreateParticle(APS\Han, 3) R = Rand(0,2) If R = 0 SetParticleSourceColorStart(APS\Han, 255, 255, 0, .25) SetParticleSourceColorEnd(APS\Han, 255, 128, 0, .25) ElseIf R = 1 SetParticleSourceColorStart(APS\Han, 255, 128, 0, .25) SetParticleSourceColorEnd(APS\Han, 255, 255, 0, .25) Else SetParticleSourceColorStart(APS\Han, 255, 128, 0, .25) SetParticleSourceColorEnd(APS\Han, 128, 0, 0, .25) EndIf ElseIf APS\EID = 12 CreateParticle(APS\Han, 3) SetParticleSourceColorStart(APS\Han, 0, Rand(0,128), Rand(128,255), .25) SetParticleSourceColorEnd(APS\Han, 0, Rand(0,128), Rand(128,255), .25) EndIf Next End Function Function DeleteParticleSources() For APS.AutoParticleSources = Each AutoParticleSources DeleteParticleSource(APS\Han) Delete APS.AutoParticleSources Next End Function Function CreateWorld() If WorldPiv <> 0 FreeEntity WorldPiv WorldPiv = CreatePivot() MoveEntity WorldPiv, 0, 0, 10 Temp = CreateBG(.55, MapW, MapH, WorldPiv) EntityTexture Temp, UsedTileSet, 0 ScaleEntity Temp, MapW/2, MapH/2, 1 PositionEntity Temp, MapW/2-.5, -MapH/2+.5, .01 For Y2 = 0 To MapH-1 For X2 = 0 To MapW-1 Use = PeekByte(MapTiles, Pos) L1 = PeekShort(MapTiles, Pos+1) L2 = PeekShort(MapTiles, Pos+3) L3 = PeekShort(MapTiles, Pos+5) Sc# = .5 If L1 > 0 And L2 = 0 Temp = CreateBG(0, 1, 1, WorldPiv) PositionEntity Temp, X2, -Y2, 10.5, 1 ScaleEntity Temp, Sc#, Sc#, Sc# EntityTexture Temp, UsedTileSet, L1-1 EndIf If L2 > 0 Temp = CreateCube2(1-L2(X2-1, Y2), 1-L2(X2+1, Y2), 1-L2(X2, Y2-1), 1-L2(X2, Y2+1), 1-L3, WorldPiv) PositionEntity Temp, X2, -Y2, 0 ScaleEntity Temp, Sc#, Sc#, Sc# EntityTexture Temp, UsedTileSet, L2-1 If Use = 2 EntityType Temp, 2 EndIf Else If Use = 2 Temp = CreateCube2(0, 0, 1, 0, 0, WorldPiv) PositionEntity Temp, X2, -Y2, 0 ScaleEntity Temp, Sc#, Sc#, Sc# EntityAlpha Temp, 0 EntityType Temp, 2 EndIf EndIf If L3 > 0 Temp = CreateBG(0, 1, 1, WorldPiv) PositionEntity Temp, X2, -Y2, 9.5, 1 ScaleEntity Temp, Sc#, Sc#, Sc# EntityTexture Temp, UsedTileSet, L3-1 EndIf Pos = Pos+9 Next Next End Function Function CreateCube2(L, R, T, B, F, Parent) m = CreateMesh(Parent) If L > 0 ;Left Surf = CreateSurface(m) V0 = AddVertex(Surf, -1, +1, -1, 1, 0) V1 = AddVertex(Surf, -1, -1, -1, 1, 1) V2 = AddVertex(Surf, -1, +1, +1, 0, 0) V3 = AddVertex(Surf, -1, -1, +1, 0, 1) AddTriangle(Surf, V0, V1, V2) AddTriangle(Surf, V2, V1, V3) EndIf If R > 0 ;Right Surf = CreateSurface(m) V0 = AddVertex(Surf, +1, -1, -1, 1, 1) V1 = AddVertex(Surf, +1, +1, -1, 1, 0) V2 = AddVertex(Surf, +1, -1, +1, 0, 1) V3 = AddVertex(Surf, +1, +1, +1, 0, 0) AddTriangle(Surf, V0, V1, V2) AddTriangle(Surf, V2, V1, V3) EndIf If T > 0 ;Top Surf = CreateSurface(m) V0 = AddVertex(Surf, +1, +1, -1, 1, 1) V1 = AddVertex(Surf, -1, +1, -1, 0, 1) V2 = AddVertex(Surf, +1, +1, +1, 1, 0) V3 = AddVertex(Surf, -1, +1, +1, 0, 0) AddTriangle(Surf, V0, V1, V2) AddTriangle(Surf, V2, V1, V3) EndIf If B > 0 ;Bottom Surf = CreateSurface(m) V0 = AddVertex(Surf, -1, -1, -1, 0, 0) V1 = AddVertex(Surf, +1, -1, -1, 1, 0) V2 = AddVertex(Surf, -1, -1, +1, 0, 1) V3 = AddVertex(Surf, +1, -1, +1, 1, 1) AddTriangle(Surf, V0, V1, V2) AddTriangle(Surf, V2, V1, V3) EndIf If F > 0 ;Front Surf = CreateSurface(m) V0 = AddVertex(Surf, -1, +1, -1, 0, 0) V1 = AddVertex(Surf, +1, +1, -1, 1, 0) V2 = AddVertex(Surf, -1, -1, -1, 0, 1) V3 = AddVertex(Surf, +1, -1, -1, 1, 1) AddTriangle(Surf, V0, V1, V2) AddTriangle(Surf, V2, V1, V3) EndIf Return m End Function Function CreateBG(Z#, U=1, V=1, Parent=0) M = CreateMesh(Parent) Surf = CreateSurface(M) V0 = AddVertex(Surf, -1, +1, Z#, 0, 0) V1 = AddVertex(Surf, +1, +1, Z#, U, 0) V2 = AddVertex(Surf, -1, -1, Z#, 0, V) V3 = AddVertex(Surf, +1, -1, Z#, U, V) AddTriangle(Surf, V0, V1, V2) AddTriangle(Surf, V2, V1, V3) Return M End Function Function L2(X, Y) If X >= 0 And Y >= 0 And X<MapW And Y<MapH Pos = (Y*MapW*9) + X*9 L2 = PeekShort(MapTiles, Pos+3) If L2 > 0 Return 1 Return 0 Else Return 1 EndIf End Function Function Max2#(A#,B#) If A>B Return B Return A End Function Function Min#(A#,B#) If A<B Return B Return A End Function ;Game Related Function-------------------------------------------------------------------- Function CheckDeath(X, Y) If X >= 0 And Y >= 0 And X<MapW And Y<MapH Pos = (Y*MapW*9) + X*9 EID = PeekShort(MapTiles, Pos+7) If EID = 10 Return 1 If EID = 11 Return 2 Return 0 Else Return 0 EndIf End Function Function CheckWater(X, Y) If X >= 0 And Y >= 0 And X<MapW And Y<MapH Pos = (Y*MapW*9) + X*9 EID = PeekShort(MapTiles, Pos+7) If EID = 12 Return 1 Return 0 Else Return 0 EndIf End Function Ich hab keine Ahnung woran es liegt. Habe nur meinem Tileset alpha verpasst und dann war das auf einmal |
||
Warbseite |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht wäre es ein wenig hilfreicher, wenn du angibst, was denn genau das Problem ist. ![]() Auf dem Screenshot sehe ich jetzt nicht wirklich einen Fehler. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Steht im Titel. außerdem musst du nur genauer hingucken(wahrscheinlich nur überflogen-.-) ganz rechts siehst du mein Problem. aUßerdem -> mein Worklog -> Screen
die Objecte verschwinden hinter etwas was eigentlich hinter den objecten sein sollte |
||
Warbseite |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, ich habe mir nun beide deiner Bilder angesehen und konnte auch nichts finden. Nur so, es wäre vielleicht mal angebracht, du zeichnest mal ein Pfeil oder sonst was ein. Denn das einzige was auf ''Fehler'' deuten könnte sind die Flammen, und diese sehen für mich in Ordnung aus. Die Flammen erstellst du anscheinend in mehreren Ebenen innerhalb einer Würfeltiefe. Also der Ebene, auf welchem auch der Spieler steht. Selbst diese werden richtig dargestellt.
Noch so ein paar Tipps: - Du erstellst jeden Würfel zwar zu Fuß. Also per CreateMesh, AddVertex ... aber du hast da was falsch verstanden. Bei dir besitzt jeder Würfel 5 Surfaces. Selbst CreateCube wäre hier besser aufgehoben. Also bereits hier hast du erheblichen Nachholbedarf zu bewergstelligen, denn sonst läuft so ein einfaches Spiel nur noch auf High-End-Rechnern der Zukunft. - Da du dein 3D eher wie 2D bearbeitest, sollte CameraRange so gewählt werden, dass gerade mal alles abgedekt wird. So wie ich es sehe, würde ein CameraRange von 1 bis 11 schon reichen. Das würde sich sicherlich nicht negativ auf ein Z-Oder-Problem auswirken. Eventuell ist dein Problem aber auch mit einem Startwert von 0.5 schon behoben. Ich steige nämlich mit deinen ganzen Child/Parent-Verbindungen noch nicht ganz durch. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nun, ich hab den Titel gesehen und lese auch regelmässig Worklogs, sehe den Fehler aber trotzdem nicht.
Bei dir scheint ja alles in der richtigen Reihenfolge gezeichnet zu werden? Sonst kreis mal die Problemstelle ein (viele Dinge fallen ja in einem statischen Bild nicht besonders auf, während es im bewegten Spiel sehr auffällig ist). Sortierungsfehler entstehen generell, wenn zwei Objekte mit Alpha übereinander liegen - die Zeichenfolge kommt dann einfach auf die Erstellungsreihenfolge an. Problemlösung wäre dann, die Erstellungsreihenfolge anzupassen - oder man vezichtet halt auf Transparenz. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
ganz rechts am Rand fehlt ein Teil der Blöcke. Kann gerade keinen Pfeil einzeichnen, da Paint die Datei nicht öffnen kann.
MfG |
||
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
hab mal ein paar bildchen erstellt
ich hoffe das erklärt mein Problem:/ |
||
Warbseite |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
es heißt zwar, ein bild sagt mehr als 1000 worte, allerdings steig ich da immer noch nicht durch, was das problem ist. vll solltest du doch ein paar mehr worte dazu verlieren, und uns nicht nur die ganze zeit bilder hin klatschen und uns fehlersuchbild spielen lassen... | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
the FR3AK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube er meint das manchmal der Braune Hintergrund über den Blöcken liegt? Sieht zumindest danach aus... | ||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, auf dem ersten Screen von Cgamers letztem Beitrag sieht man, wie die Figur zur Hälfte verdeckt wird. Und Cgamer: Wir sind zum "Wo ist Walter?"-Alter raus, kreise in Zukunft Grafikfehler ein oder markiere sie irgendwie. Wenn du Hilfe möchtest, darfst du deinen Helfern ruhig etwas entgegen kommen. | ||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
DAK hat Folgendes geschrieben: es heißt zwar, ein bild sagt mehr als 1000 worte, allerdings steig ich da immer noch nicht durch, was das problem ist. vll solltest du doch ein paar mehr worte dazu verlieren, und uns nicht nur die ganze zeit bilder hin klatschen und uns fehlersuchbild spielen lassen...
*hüstel* das Problem ist schon ersichtlich, man muss einfach die Augen öffnen. Guck mal beim ersten Bild die Reihe an, ganz Rechts, im Threadbeginn-Post. Fällt dir was auf? |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
The_Nici hat Folgendes geschrieben: *hüstel* das Problem ist schon ersichtlich, man muss einfach die Augen öffnen.
Offenbar nicht, wenn mehr als die Hälfte das Problem nicht sieht und allgemeines Rätselraten herrscht. Ein einfaches 'einige Blöcke werden über den anderen gezeichnet, wie zum Beispiel rechts im Bild' oder gleich das Bild, wo der Charakter halb verschwindet, hätten ja schon gereicht. Zu deinem Problem: Wie oben bereits erwähnt, kommt es bei der Sortierung von Alphaobjekten auf die Erstellungsreihenfolge an. Bei dir ist das Problem aber noch viel prekärer, wie hectic bereits gesagt hat: Du erstellst pro Tilewürfel 5(!) Surfaces. Dabei steigt die Sortierung logischerweise komplett aus. Ausserdem zwingt das so ziemlich jeden Rechner in die Knie - du musst dich dringend mit SingleSurface auseinandersetzen, sprich, pro Tileart ein Mesh und eine Surface, und immer zu dieser Surface die Vertices hinzufügen, anstatt immer eine neue zu erstellen. Ausserdem kannst du, wenn die Sortierung immer noch nicht geht, auf die einzelnen Meshs EntityOrder ![]() Aber so, wie du die Maps jetzt erstellst, wirst du das kaum hinbekommen (ausser, du verzichtest auf Transparenz). |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
...ich hab das spiel nicht einmal fertig und das problem geht auch ohne alpha-channel nicht weg. und das mit den Surfaces hab ich bereits geändert(nur 1ne surface pro mesh)
[edit]kleiner tipp: ein wenig die augen aufmachen und mehr lesen. vlt sieht man dann die fehler? außerdem konnte paint die png dateien net öffnen |
||
Warbseite |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: kleiner tipp: ein wenig die augen aufmachen und mehr lesen. vlt sieht man dann die fehler?
Sagmal was willst du eigentlich? Sehen wir aus wie Hellseher? Erklär es uns einfach richtig, da brauchen wir auch kein Philosophiebuch vorholen um was in deine mangelhaften Erklärungen reinzuinterpretieren. Das Problem ist wie Noobody das schon treffend formulierte einfach mit EntityOrder zu lösen. Du brauchst in deinem 2D Spiel theoretisch keinen Z-Buffer, also leg doch per EntityOrder einfach selbst die Renderreihenfolge fest. |
||
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
NightPhoenix hat Folgendes geschrieben: Zitat:
kleiner tipp: ein wenig die augen aufmachen und mehr lesen. vlt sieht man dann die fehler?
Sagmal was willst du eigentlich? Sehen wir aus wie Hellseher? Erklär es uns einfach richtig, da brauchen wir auch kein Philosophiebuch vorholen um was in deine mangelhaften Erklärungen reinzuinterpretieren. Das Problem ist wie Noobody das schon treffend formulierte einfach mit EntityOrder zu lösen. Du brauchst in deinem 2D Spiel theoretisch keinen Z-Buffer, also leg doch per EntityOrder einfach selbst die Renderreihenfolge fest. 1.Den Fehler finden, beheben 2.manchmal ja manchmal nein 3. verdammte scheiße nochmal... es regt einen auf wenn jemand scheiße postet ohne den thread gelesen zu haben.(und ich hab das gefühl, man will den thread gar nicht erst lesen) 4.Mit entityorder klappts auch nich. 5.Das spiel ist zu 7/8 3D 6.Dann hab ich son drecks ergebnis, das wenn man einen block von links sieht(d.h. die linke seite sieht) der block über alles gezeichnet wird. 7.Im ersten Post hab ich gesagt das ich nicht weiß woher und warum es zu diesem fehler kommt |
||
Warbseite |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Cgamer, auch wenn du mich grad so ein kleines (wirklich nur ganz MIMIMIMINIklitzekleines bisschen) mit deiner unfreundlichen Art aufregst, geb ich dir jetzt noch mal eine Antwort, die um einiges korrekter ist, als deine Fragestellung und übrigens von Noobody schon genannt wurde.
Cgamer hat Folgendes geschrieben: Habe nur meinem Tileset alpha verpasst und dann war das auf einmal
Das. Ist. Das. Problem. Faces, die beide Alphachanneltexturen haben, werden nicht ge-Z-puffert. Face it. Du kannst dir gerne mal vorstellen, welchen Speichermehraufwand das bedeuten würde, an jedem Pixel sämtliche Texelpositionen zu speichern, um halbtransparente Texel, die später gerendert werden, richtig mit den anderen zu überblenden. Dieses Problem hatte ich auch, und die Forensuche hat mich dann traurigerweise darauf hingewiesen, dass das nunmal nicht direkt zu umgehen ist. Wenn du mehrere Alphachanneltexturen (also, mit Flag 2 geladen, scheissegal, ob die PNG nen alphakanal hat), zeichnest, entscheidet die erstell-Reihenfolge, welches Face über welchem liegt. Cgamer hat Folgendes geschrieben: das problem geht auch ohne alpha-channel nicht weg Entweder das oder die Aussage in deinem ersten Post ist somit schlicht und einfach.... *trommelwirbel* falsch. Wenn "Keinproblem" = Keine Fehler, "Keinproblem" +"Irgendwas" = Fehler und "Keinproblem" +"Irgendwas" -"Irgendwas" = Fehler ist, dann machst DU irgendwas falsch. Und übrigens: Paint kann deine PNGs nicht laden, weil es gottverfluchte JPGs sind.
UND JA! Ich reg mich hier grad tierisch auf! Cgamer hat Folgendes geschrieben: 7.Im ersten Post hab ich gesagt das ich nicht weiß woher und warum es zu diesem fehler kommt
Lüge! Genau das GEGENTEIL ist der Fall! >.< hör auf dich hier zum Affen zu machen. |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
hör auf mich hier wie ein depp darzustellen.
Wenn ich verdammt nochmal nicht weiß woher das kommt weil ich nich nur eben meinem tileset nur alpha verpasst habe(kann ja auch am grafik programm liegen). Zitat: Cgamer hat Folgendes geschrieben:
7.Im ersten Post hab ich gesagt das ich nicht weiß woher und warum es zu diesem fehler kommt Lüge! Genau das GEGENTEIL ist der Fall! kann gar keine Lüge sein DENN zu dem zeitpunkt wusste ich eben nicht woher der fehler kam. und wie du siehst werden ja nicht nur alphatextured blöcke beeinflusst sondern gleich die ganze 3d-Welt.(inklusive overlay) Zitat: Cgamer hat Folgendes geschrieben:
das problem geht auch ohne alpha-channel nicht weg Entweder das oder die Aussage in deinem ersten Post ist somit schlicht und einfach.... *trommelwirbel* falsch. Wenn "Keinproblem" = Keine Fehler, "Keinproblem" +"Irgendwas" = Fehler und "Keinproblem" +"Irgendwas" -"Irgendwas" = Fehler ist, dann machst DU irgendwas falsch. Und übrigens: Paint kann deine PNGs nicht laden, weil es gottverfluchte JPGs sind. UND JA! Ich reg mich hier grad tierisch auf! dann sag/zeig mir WAS ich falsch mache... und das hat hier bisher NIEMAND gemacht. PS: reg dich ruhig auf... PPS: wegen dir muss meine Tastatur leiden... Zitat: Paint kann deine PNGs nicht laden, weil es gottverfluchte JPGs sind.
es sind PNGs... ich muss es ja wissen da ich die screens gemacht habe... Solangsam fängt mich diese Community mit diesen Usern an auf die Nerven zu gehen. Fast jeder 2.Post in einem Thread hat aggressive Ausdrücke/Formulierung. Es geht einem echt auf den ... ! ES KOTZT MICH EINFACH AN! [edit]hab nobody's posts, überlesen. half mir aber nicht weiter. |
||
Warbseite |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bereits mit der Außage ''Ich hab keine Ahnung woran es liegt. Habe nur meinem Tileset alpha verpasst und dann war das auf einmal'' zeigt man doch, dass man weiß woran das liegt (Stichwort: +Tileset +Alpha +Verpasst). Das wollte wohl Holzchopf damit ausdrücken. Außerdem finde ich bereits den Eröffnungsbeitrag recht unfreundlich, was dann nicht selten eben so eskalliert.
Nur so nebenbei. Wenn mein Vorschlag und vor allem der Vorschlag von Noobody nicht das Problem löst, dann ist der Fehler bereits ganz wo anders zu suchen. Denn, Blitz3D zeichnet nicht nach Lust und Laune, sondern das was man vorgibt. Lediglich die bereits genannten Punkte können durch die 3D-Technik beeinflusst sein. Paar Dinge, die mir auffallen: - Bei Sprites nicht ScaleEntity, sondern ScaleSprite ![]() - CreateBG erstellst du auf Z=0.55 und verschiebst es später noch um Z=Z+0.01. Dann später erstellst du CreateBG auf Z=0 und verschiebst es noch um Z=Z+10.5. Auch noch einmal auf Z=9.5, und das alles auf CameraRange-Faktor 1/1000. Außerdem lädst du Alphatexturen und das auch noch als animierte Texturen, welche nicht selten zusätzlich noch Probleme bereiten. - Du skallierst die Kamera. Das geht zwar, sollte aber doch lieber mit CameraZoom ![]() - Du positionierst den Player an manchen Stellen immer gleich doppelt. Grund? Naja, der Code ist für mich zu unübersichtlich. Zu viele nichts aussagende ''Zahlenkodierungen'' um irgendwas zu machen etc... Ich würde den Code an sich komplett neu struktuieren. Sachen werden zwischendurch mal geladen etc... So verliert man schnell die Kontrolle zum Programm. Nur so als Anregung. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi ....
hir wurde ja fiel erzählt ...... aber das wesentliche habt ihr noch garnicht erwähnt . ![]() Gruss TFT PS: Ich lieb EntityOrder() PS2: Und ohne Include ... kann man den Code nichtmal testen. |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
@tft: Du kannst den Code sowieso nicht testen da ich funktionierende functions rausgenommen habe aber die 3d functions drin gelassen hab.
@hectic: Sprites haben SpriteViewMode 2, Camera skalieren war eigentlich nur ein test, 'CreateBG() Z verschiebung funzt nicht Zwischendurch wird gar nichts geladen, nur beim Level change wird etwas geladen(neues Tileset) |
||
Warbseite |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group