
SpriteCollision und DrawText - Problem
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
*SOIFZ*
wenn du die CEGUI elemente verwenden willst, und das sind die einzigen Gadgets die über nem Fullscreen funzen,
dann musst du InitEngine3D() ausführen, und wenn dein Game nur ein PONG mit drei Farben ist.
... ich hab das schon ein paar mal angesprochen, dass man das vielleicht outsourcen sollte, in zwei verschiedene Inits trennen,
aber es interessiert ja zu wenige solange sie nicht selber auf das Problem stoßen.
wenn du die CEGUI elemente verwenden willst, und das sind die einzigen Gadgets die über nem Fullscreen funzen,
dann musst du InitEngine3D() ausführen, und wenn dein Game nur ein PONG mit drei Farben ist.
... ich hab das schon ein paar mal angesprochen, dass man das vielleicht outsourcen sollte, in zwei verschiedene Inits trennen,
aber es interessiert ja zu wenige solange sie nicht selber auf das Problem stoßen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
in den zwei snippets nicht... wie gesagt, ich kenn nicht das ganze projekt, war mir jetz zu müßig das runterzuladen...
aber wenn du dir das ganze angeschaut hast, dann haste ja gesehen, ob es läuft wenn du's richtig korrigierst,
und nur er nen typo reingehaun hat beim umsetzen des tipps..
aber wenn du dir das ganze angeschaut hast, dann haste ja gesehen, ob es läuft wenn du's richtig korrigierst,
und nur er nen typo reingehaun hat beim umsetzen des tipps..
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- KeyKon
- Beiträge: 1412
- Registriert: 10.09.2004 20:51
- Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit) - Wohnort: Ansbach
- Kontaktdaten:
Hab jetzt ewig nach dem Fehler gesucht, er lag nich im Code sondern im Subsystem: Er hat OpenGL benutzt, damit kenn ich mich leider nich aus, is damit kein ScreenDrawing möglich?
EDIT: Hab jetz mal ein paar Sachen im Code gefixt, er läuft jetz auf jeden Fall, ich emfpehle das DX9 Subsystem zu nehmen, da es die AlphaBlending Qualitäten von OpenGL besitzt aber das Drawing funktioniert:
Abschließend sollte ich noch sagen das das ganze nur eine Verbresserung deines Codes is, die Struktur hab ich nich groß verändert und du wirst dir das Genick brechen wenn du versuchst daraus eine größere Sache zu machen, ich leg dir wirklich nochmal die Tile-Technik ans Herz, das is glaubich für dich genau das richtige...
EDIT: Hab jetz mal ein paar Sachen im Code gefixt, er läuft jetz auf jeden Fall, ich emfpehle das DX9 Subsystem zu nehmen, da es die AlphaBlending Qualitäten von OpenGL besitzt aber das Drawing funktioniert:
Code: Alles auswählen
; Win
; Engine
; Copyright (C) Tur0k
; Fixes by KeyKon
UsePNGImageDecoder()
; WindowMouseX(0)
;ohne Screen immer GetAsyncKeyState_(#Button) verwenden.
;(Linke Maustaste: #VK_LBUTTON, rechte: #VK_RBUTTON)
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Error", "Can't open the sprite system", 0)
End
EndIf
If InitSprite3D() = 0
MessageRequester("Error", "Sprite3D system can't be initialized correctly", 0)
End
EndIf
PlayerX = 1
PlayerY = 1
WandX = 50
WandY = 50
menubox = 0
Enumeration ;Sprites
#Sp_Map
#Sp_Wand
#Sp_Cursor
#Sp_MiniBox
EndEnumeration
Structure sp
sid.l
s3did.l
EndStructure
Dim Figur.sp(3)
If OpenWindow(0, 0, 0, 400, 400, "Turoks Engine", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(0), 0, 0, 400, 400, 0, 0, 0)
Sprite3DQuality(#PB_Sprite3D_BilinearFiltering)
LoadSprite(#Sp_MiniBox, "mini_box.png", #PB_Sprite_Texture | #PB_Sprite_AlphaBlending)
CreateSprite3D(#Sp_MiniBox, #Sp_MiniBox)
LoadSprite(#Sp_Cursor, "cursor.png", #PB_Sprite_Texture | #PB_Sprite_AlphaBlending)
CreateSprite3D(#Sp_Cursor, #Sp_Cursor)
LoadSprite(#Sp_Map, "map_01.png", #PB_Sprite_Texture)
CreateSprite3D(#Sp_Map, #Sp_Map)
LoadSprite(#Sp_Wand, "wand.png", #PB_Sprite_Texture)
CreateSprite3D(#Sp_Wand, #Sp_Wand)
For x = 0 To 3
Figur(x)\sid = LoadSprite(#PB_Any,"person"+Str(x+1)+".png",#PB_Sprite_Texture)
Figur(x)\s3did = CreateSprite3D(#PB_Any,Figur(x)\sid)
Next
EndIf
Else
MessageRequester("Error", "Can't open windowed screen!", 0)
End
EndIf
Repeat
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Event = 0
ExamineKeyboard()
If GetAsyncKeyState_(#VK_RBUTTON)
DispBox = 1
Else
DispBox = 0
EndIf
Delay(5)
; ------------------------------------------------
ClearScreen(RGB(0,0,0))
; ------------------------------------------------
If Start3D()
DisplaySprite3D(#Sp_Map, 0, 0)
DisplaySprite3D(#Sp_Wand, WandX, WandY)
DisplaySprite3D(Figur(way)\s3did, PlayerX, PlayerY)
If WindowMouseX(0) > -1
DisplaySprite3D(#Sp_Cursor, WindowMouseX(0)-12, WindowMouseY(0)-12)
EndIf
If DispBox
DisplaySprite3D(#Sp_MiniBox, WindowMouseX(0)-55, WindowMouseY(0)+15)
EndIf
Stop3D()
EndIf
; ------------------------------------------------
If KeyboardPushed(#PB_Key_W) And PlayerY > 0
PlayerY-1
way = 3
If SpriteCollision(Figur(way)\sid,PlayerX,PlayerY,#Sp_Wand,WandX,WandY)
PlayerY+1
EndIf
EndIf
; ------------------------------------------------
If KeyboardPushed(#PB_Key_S) And PlayerY < 356
PlayerY +1
way = 0
If SpriteCollision(Figur(way)\sid,PlayerX,PlayerY,#Sp_Wand,WandX,WandY)
PlayerY-1
EndIf
EndIf
; ------------------------------------------------
If KeyboardPushed(#PB_Key_A) And PlayerX > 0
PlayerX -1
way = 2
If SpriteCollision(Figur(way)\sid,PlayerX,PlayerY,#Sp_Wand,WandX,WandY)
PlayerX+1
EndIf
EndIf
; ------------------------------------------------
If KeyboardPushed(#PB_Key_D) And PlayerX < 379
PlayerX +1
way = 1
If SpriteCollision(Figur(way)\sid,PlayerX,PlayerY,#Sp_Wand,WandX,WandY)
PlayerX-1
EndIf
EndIf
SetWindowTitle(0, "Spieler Position: " + "X: " + Str(PlayerX) + " " + " Y: " + Str(PlayerY) + " " + "Mouse X: " + Str(WindowMouseX(0)) + " " + " Mouse Y: " + Str(WindowMouseY(0)))
If StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
BackColor(RGB(0,155,155)) ; Change the text back and front colour
FrontColor(RGB(255,255,255))
If DispBox
DrawText(WindowMouseX(0)-44, WindowMouseY(0)+23,"This is a test")
EndIf
StopDrawing()
EndIf
FlipBuffers()
; ------------------------------------------------
Until Quit Or KeyboardPushed(#PB_Key_Escape)
(\/) (°,,,°) (\/)
- Tur0k
- Beiträge: 187
- Registriert: 16.02.2009 21:41
- Computerausstattung: 4.00 GB RAM, 2x 2.20Ghz, 340GB+500GB
Danke KeyKon für deine Tipps!
Ich werde von neu beginnen, und auch mit TileArray usw. arbeiten.
So wäre es viel leichter für mich.
Auf den Code werde ich auch natürlich achten.
Edit:
Vielen Dank für den Codefix!
Kleiner Fehler, wenn man die Taste S klickt, wird die Map (Bild) bewegt.
Versuch ich mal zu fixen...
Und den Code zu verstehen.
Mfg. Tur0k
Ich werde von neu beginnen, und auch mit TileArray usw. arbeiten.
So wäre es viel leichter für mich.
Auf den Code werde ich auch natürlich achten.
Edit:
Vielen Dank für den Codefix!

Kleiner Fehler, wenn man die Taste S klickt, wird die Map (Bild) bewegt.
Versuch ich mal zu fixen...
Und den Code zu verstehen.
Mfg. Tur0k
buuh* 

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
das Einrücken geht einfacher als man denkt, wenn man den zweiten teil eines doppelbefehls gleich mit dem autocomplete mit einsetzt.
außerdem hilft es beim strukturieren.
ich könnte nicht halb so effektiv coden, wenn ich jede zeile ganz vorne anfangen würde.
außerdem hilft es beim strukturieren.
ich könnte nicht halb so effektiv coden, wenn ich jede zeile ganz vorne anfangen würde.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.