Ein Triangle "löschen"

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

onkelz89

Betreff: Ein Triangle "löschen"

BeitragSa, Dez 15, 2007 23:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

erstmal der Code, dann die Erklärung Wink

Code: [AUSKLAPPEN]

Global cu=CreateSphere(4)
EntityPickMode cu,2

Type tri
 Field v0
 Field v1
 Field v2
End Type


For i=1 To CountTriangles(GetSurface(cu,CountSurfaces(cu)))-1
tri.tri = New tri
tri\v0 = TriangleVertex(GetSurface(cu,CountSurfaces(cu)),i,0)
tri\v1 = TriangleVertex(GetSurface(cu,CountSurfaces(cu)),i,1)
tri\v2 = TriangleVertex(GetSurface(cu,CountSurfaces(cu)),i,2)
Next

;###

Function DelTri(cam,x,y)
ent=CameraPick(cam,x,y)
surf=PickedSurface()
tria=PickedTriangle()

If ent<>0 Then
      
muha0=TriangleVertex(surf,tria,0)
muha1=TriangleVertex(surf,tria,1)
muha2=TriangleVertex(surf,tria,2)
      
ClearSurface surf,False,True
      
For tri.tri = Each tri
If muha0=tri\v0 And muha1=tri\v1 And muha2=tri\v2 Then

Else
AddTriangle (surf,tri\v0,tri\v1,tri\v2)
EndIf
Delete tri.tri
Next
      
         
For i=1 To CountTriangles(surf)
tri.tri = New tri
tri\v0 = TriangleVertex(surf,tria,0)
tri\v1 = TriangleVertex(surf,tria,1)
tri\v2 = TriangleVertex(surf,tria,2)
Next
   
End If

End Function




Sooo, was ich machen will folgendes:

Ich möchte für mein Game Fenster erstellen die dann wenn man darauf Schießt Stückweise zerstört werden.

In dem Code oben speichere ich zu aller Erst alle Triangles am Objekt.
Dann prüfe ich welches Triangle "angeklickt" wurde.
Dann alle Tri. löschen
Dann alle Tri. neu erstellen mit der Abfrage dass es ungleich mit dem "angeklickten" ist.

So,
es geht... aber nur beim ersten mal, danach löscht er alle Tri. außer meistens eines (in der Nähe des angeklickten)...

Ich komm nich weiter...

Hoffe Ihr habt schon ne Lösung Razz

MfG Onkelz
 

echi

Betreff: Re: Ein Triangle "löschen"

BeitragSo, Dez 16, 2007 0:05
Antworten mit Zitat
Benutzer-Profile anzeigen
onkelz89 hat Folgendes geschrieben:
So,
es geht... aber nur beim ersten mal, danach löscht er alle Tri. außer meistens eines (in der Nähe des angeklickten)...


Daraus schließe ich, dass du es schon weiter programmiert hast, als dus hier geschrieben hast, denn der Code macht rein garnichts Wink

skey-z

BeitragSo, Dez 16, 2007 0:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum eigentlich so kompliziert, mach das Glas doch einfach als Sprite und mache die Einschüße/Aussplitterungen als Alpha werte, so Dass nach einigen Schüssen nur noch ein paar Splitter am Rand stehen
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

onkelz89

BeitragSo, Dez 16, 2007 0:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja klar, Razz
hab hier nur die Wichtigen Element gepostet ... aber hier der komplette zum testen is wahrscheinlich besser so Wink

Code: [AUSKLAPPEN]
Graphics3D 640,480,0,2

Global fpsrate,loops,fpstime

SetBuffer BackBuffer()
lit=CreateLight()
LightColor lit,0,60,0
PositionEntity lit,0,0,-2

cam=CreateCamera()
CameraRange cam,.1,1000
PositionEntity cam,-5,0,3


Global cu=CreateSphere(4)
TurnEntity cu,45,20,33
EntityPickMode cu,2

Type tri
 Field v0
 Field v1
 Field v2
End Type

Global save

For i=1 To CountTriangles(GetSurface(cu,CountSurfaces(cu)))-1
   tri.tri = New tri
   tri\v0 = TriangleVertex(GetSurface(cu,CountSurfaces(cu)),i,0)
   tri\v1 = TriangleVertex(GetSurface(cu,CountSurfaces(cu)),i,1)
   tri\v2 = TriangleVertex(GetSurface(cu,CountSurfaces(cu)),i,2)
Next


zahl=10
         
For tri.tri = Each tri
   Text 10,zahl,tri\v0+", "+tri\v1+", "+tri\v2
   zahl=zahl+15
Next

WaitKey

ScaleEntity cu,3,3,3

PositionEntity cu,-5,0,15
EntityAlpha cu,.3


Global ent
Global tria
Global surf

While Not KeyDown(1)

   xm=MouseX()
   ym=MouseY()
   If MouseDown(1) Then
      Check_Hit(cam,xm,ym)
   End If
   
   UpdateWorld
   RenderWorld
   
   Rect MouseX(),MouseY(),3,3
   
   Text 10,70,FPS()
   Text 10,90,save

   Flip
Wend

FreeEntity lit
FreeEntity cam
EndGraphics
End

Function Check_Hit(cam,x,y)
   ent=CameraPick(cam,x,y)
   surf=PickedSurface()
   tria=PickedTriangle()

   If ent<>0 Then
      
      muha0=TriangleVertex(surf,tria,0)
      muha1=TriangleVertex(surf,tria,1)
      muha2=TriangleVertex(surf,tria,2)
      
      ClearSurface surf,False,True
      
      For tri.tri = Each tri
         If muha0=tri\v0 And muha1=tri\v1 And muha2=tri\v2 Then
         
         Else
            AddTriangle (surf,tri\v0,tri\v1,tri\v2)
         EndIf
         Delete tri.tri
      Next
      
      save=CountTriangles(surf)      
            
      For i=1 To CountTriangles(surf)
         tri.tri = New tri
         tri\v0 = TriangleVertex(surf,tria,0)
         tri\v1 = TriangleVertex(surf,tria,1)
         tri\v2 = TriangleVertex(surf,tria,2)
      Next
   
   End If
   
End Function



Function FPS()

loops = loops + 1

If MilliSecs() - fpstime > 1000 Then
fpsrate = loops
loops = 0
fpstime = MilliSecs()
EndIf
Return fpsrate

End Function

End


EDIT:

@ skey-z

das geht nicht, weil ich später ne kolli abfrage brauchen werde... und mit sprites is so ne sache ...

Lunatix

BeitragSo, Dez 16, 2007 10:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Zehn sekunden arbeit Wink

Code: [AUSKLAPPEN]
      For tri.tri = Each tri
         If muha0=tri\v0 And muha1=tri\v1 And muha2=tri\v2 Then
       
         Else
            AddTriangle (surf,tri\v0,tri\v1,tri\v2)
         EndIf
          Delete tri.tri
      Next


müsste

Code: [AUSKLAPPEN]
      For tri.tri = Each tri
         If muha0=tri\v0 And muha1=tri\v1 And muha2=tri\v2 Then
           Delete tri.tri
         Else
            AddTriangle (surf,tri\v0,tri\v1,tri\v2)
         EndIf
         
      Next


sein Wink

Du hast einfach alle Triangles aus der Klasse gelöscht, aber du darfst nur das löschen, welches auch wirklich weggeschossen wurde.
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...
 

onkelz89

BeitragSo, Dez 16, 2007 10:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank!!!

keine Ahnung was ich mir da gedachte habe:

Code: [AUSKLAPPEN]
For tri.tri = Each tri
         If muha0=tri\v0 And muha1=tri\v1 And muha2=tri\v2 Then
            Delete tri.tri
         Else
            AddTriangle (surf,tri\v0,tri\v1,tri\v2)
         EndIf
         ;Delete tri.tri
      Next
      
      save=CountTriangles(surf)      
            
      ;For i=1 To CountTriangles(surf)
         ;tri.tri = New tri
         ;tri\v0 = TriangleVertex(surf,tria,0)
         ;tri\v1 = TriangleVertex(surf,tria,1)
         ;tri\v2 = TriangleVertex(surf,tria,2)
      ;Next


den unteren Teil habe ich auch rausgenommen, da er gar nicht nötig ist nur performance zieht...

Naja geht auf jeden Fall jetzt. SUPER Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group