Ein Triangle "löschen"
Übersicht

onkelz89Betreff: Ein Triangle "löschen" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
erstmal der Code, dann die Erklärung ![]() 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 ![]() MfG Onkelz |
||
echiBetreff: Re: Ein Triangle "löschen" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
onkelz89 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja klar, ![]() hab hier nur die Wichtigen Element gepostet ... aber hier der komplette zum testen is wahrscheinlich besser so ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zehn sekunden arbeit ![]() 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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group