[erledigt] Probleme mit Sprites

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

PSY

Betreff: [erledigt] Probleme mit Sprites

BeitragDo, Nov 09, 2006 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi,

heute hab ich mal mit 3D angefangen und hier ist schon das 1. Problem Rolling Eyes


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

Blitzcoder

Newsposter

BeitragDo, Nov 09, 2006 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Nov 09, 2006 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

skey-z

BeitragDo, Nov 09, 2006 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Twitter

PSY

BeitragDo, Nov 09, 2006 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi,

erstmal danke alle, das Positionieren funzt jetzt Very Happy

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 Shocked

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

BeitragDo, Nov 09, 2006 23:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

PSY

BeitragFr, Nov 10, 2006 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink


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 Smile
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

Blitzcoder

Newsposter

BeitragFr, Nov 10, 2006 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Nov 13, 2006 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
erledigt. lösung siehe ursprüngliches post

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group