[erledigt] Probleme mit Sprites
Übersicht

![]() |
PSYBetreff: [erledigt] Probleme mit Sprites |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hoi,
heute hab ich mal mit 3D angefangen und hier ist schon das 1. Problem ![]() Code: [AUSKLAPPEN] Graphics3D 800,600,0,2
SetBuffer BackBuffer() cam=createcamera() light=createlight() ;150 sprites erstellen Dim sprite(150) For s= 1 To 150 sprite(s) = CreateSprite() EntityColor sprite(s),0,255,0 ScaleSprite sprite(s),2,2 EntityPickMode sprite(s),3 Next PositionEntity cam,43,32,-30 position_tables() ;sprites setzen Repeat ent=camerapick(cam,mousex(),mousey()) if ent<>0 then EntityColor ent,255,0,0 RenderWorld Flip Until KeyDown(1) end Function position_tables() s%=1 For i=1 To 10 For j=1 To 15 PositionEntity sprite(s), i*4.1 ,j*4.1 ,0 s=s+1 Next Next End Function Also erstmal sind die schwarzen Linien nicht immer gleich dick...scheint auch von der jeweiligen Grafikkarte abzuhängen. Hängt wohl auch irgendwie mit der Kameraentfernung zusammen Irgendwann will ich halt mal mit nem 2D-Tilescroller anfangen, der auf 3D Basis arbeitet. Aber dafür müssen die Sprites exakt den gleichen Abstand voneinander haben (bzw. pixelgenau aneinanderliegen). Dann Camperapick: Wenn ich die Sprites nicht skaliere, arbeitet es genau. Aber sobald ich sie vergrössere (wie hier im Code), muss man mit der Maus in der Nähe des Zentrums eines Sprites sein, bis Camerapick anspringt...geht mal mit der Maus in die Ecken der Sprites, da geht es nicht. Kann man da was dran machen? Danke schonma, PSY (edit) erledigt. wen's interessiert -->hab anstatt sprites einfach 140 würfel mit höhe 1 genommen. mit denen funktioniert camerapick ohne probleme, und ausserdem sind sie fast 3x so schnell wie die gleiche anzahl sprites ^^ das war definitiv das 1. und letzte mal, dass ich mit sprites gearbeitet habe ^^ |
||
- Zuletzt bearbeitet von PSY am Mo, Nov 13, 2006 19:13, insgesamt einmal bearbeitet
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es gibt hier im Tutorials Bereich eine gute Erklärung für 2D mit 3D-Technik. | ||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
also erstmal:
Selbst bei Tile Technik kannst du mit maximal 3 Sprites arbeiten: Upper Sprite, Mid Sprite, Lower Sprite zweitens: die sind exakt gleich weit voneinander entfernt. Nur der eine liegt noch auf dem jeweiligen Pixel, der nächste wieder nicht, da der Strahl knapp am Sprite vorbei geht. drittens: Wenn schon so, dann müssen sie exakt aneinander sein und single surface basiert. |
||
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. |
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hir ist ein code, wmot du die Sprites wie 2D Objekte positionieren kannst
Code: [AUSKLAPPEN] PositionEntity sprite,((x-pos)*2)-x_res+x_pos,-((y_pos)*2)+y_res-y_pos, x_res x_pos und y_pos sind die genauen Koordinaten wie bei 2D x_res und y_res sind ist die verwendete Auflösung hierbei wird das sprite wie midhandle positioniert, wenn du es allerdings an der oberen rechten kannte setzen willst, musst du nur jeweils das 2. x_pos und y_pos weglassen. |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hoi,
erstmal danke alle, das Positionieren funzt jetzt ![]() Hier der Code: Code: [AUSKLAPPEN] Global res_x=800, res_y=600
Graphics3D res_x,res_y,0,2 SetBuffer BackBuffer() cam=createcamera() CameraRange cam,1,res_x light=createlight() ;grösse der sprites Global SpriteSize_X=40 Global SpriteSize_Y=40 ;140 sprites erstellen Dim sprite(140) For s= 1 To 140 sprite(s) = CreateSprite() ScaleSprite sprite(s),SpriteSize_X,SpriteSize_Y EntityColor sprite(s),0,255,0 EntityPickMode sprite(s),3 Next position_sprites() ;sprites setzen Repeat ent=camerapick(cam,mousex(),mousey()) if ent<>0 then EntityColor ent,255,0,0 RenderWorld Flip until KeyDown(1) end Function position_sprites() s%=1 For i=0 To 9 For j=0 To 13 PositionEntity sprite(s),(i*82)-res_X+SpriteSize_X,-(j*82)+res_Y-SpriteSize_Y,res_x s=s+1 Next Next End Function Bleibt noch die Frage mit camerapick. Die Sprites färben sich nur dann rot, wenn sich die Maus genau über dem Mittelpunkt des Sprites befindet, d.h. wenn ich die Sprites skaliere, hab ich ein Problem ![]() Kann man das irgendwie lösen? Ausser die Mausposition abzufragen und mit select case bestimmen, über welchem Sprite sich die Maus gerade befindet... @steptiger Zitat: Selbst bei Tile Technik kannst du mit maximal 3 Sprites arbeiten:
Upper Sprite, Mid Sprite, Lower Sprite Zitat: Nur der eine liegt noch auf dem jeweiligen Pixel, der nächste wieder nicht, da der Strahl knapp am Sprite vorbei geht.
Sorry steh ich aufm Schlauch. 3 Sprites? Strahl? |
||
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
ehm, tjoa ist doof. Hat was mit Raytracing zu tun, egal.
Wenn das positionieren funktioniert, dann ist ja gut. Mit den 3 Tiles: Wenn du mal den RPG Maker 2000 benutzt hast, dann weißt du, dass es da 3 ImageLayer gibt. Layer 1 = Lower Layer -Grass -grundlegende Sachen, Felsen, Wände usw. Layer2 = Mid Layer -Statuen -Tische -Stühle -Sachen, die eben im Raum stehen können, auch Bilder und so. Layer3 = Event Layer -Events -Personen die sprechen können, die interagieren und so weiter Besser, du machst es auch so, da es sonst sehr langsam wird. Sprites sind immer so ne Sache. Wenn du jedoch Sprites nutzen willst, da sie schneller als 2d sind, dann benutze bitte eine Single-Surface Technik. Sprites kann man keinem zumuten ^^ |
||
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. |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
StepTiger hat Folgendes geschrieben: ehm, tjoa ist doof. Hat was mit Raytracing zu tun, egal.
Achso Du meinst wegen den Abständen. Ok, dann weiss ich Bescheid. Zitat: Mit den 3 Tiles: Wenn du mal den RPG Maker 2000 benutzt hast, dann weißt du, dass es da 3 ImageLayer gibt. Momentan brauch ich's nur fürne kleine Verwaltungssoftware, mit 140 "Stühlen" quasi, die ich anklicken muss. Da reichen Sprites locker, da sich ausser der Maus fast nix bewegt ![]() Zitat: Wenn du jedoch Sprites nutzen willst, da sie schneller als 2d sind, dann benutze bitte eine Single-Surface Technik. Sprites kann man keinem zumuten Werd ich auch tun. Aber ich wollt erstmal wenigstens etwas mit Sprites gemacht haben, bevor ich mit SS anfang ![]() Hab bis jetzt halt nur was in 2D gemacht... Danke erstmal für die Infos Aber wie krieg ich denn nun saubere Kollisionen hin? Warum funktioniert Camerapick nicht mit skalierten Sprites? Muss ich etwa für jedes Sprite eine Collisionsbox festlegen? l8er, psy |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, Sprites kann man keinem Zumuten, aber für einen Anfänger, reicht es doch erstmal. Nur zum üben. Man kann locker 100 Sprites machen, ohne dass es merklich langsamer wird. Es kommt ja nicht auf tolle 3D-Effekte an. | ||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
erledigt. lösung siehe ursprüngliches post | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group