durch CameraPick die DimNummer erfahren ?
Übersicht BlitzBasic Blitz3D
StarGazerBetreff: durch CameraPick die DimNummer erfahren ? |
Mo, Dez 15, 2003 17:34 Antworten mit Zitat |
|
---|---|---|
Hallo
Ich habe da ein Problem mit CameraPick. Ich habe mehrere Objekte im einem DimFeld erstellt, und möchte durch das CameraPick erfahren welches Objekt welchem DimFeld angehört. (die entsprechende DimNummer) Ich hoffe das geht irgend wie, und jemand von kann mir helfen. Der Code ist flasch, eigentlich sollte es nur ein Beisspiel sein, indem das entsprechende Objekt eines Dimfeldes durch CameraPick leuchtet. Es geht mir nicht darum das entsprechende Objekt zu picken/leuchten lassen, sondern herauszufinden welche DimNummer ein bestimmtes Objekt hat. Ich hoffe ihr könnt mir zeigen wie es richtig geht. Code: [AUSKLAPPEN] Graphics3D 640,480,0,2
SetBuffer BackBuffer() camera=CreateCamera() light=CreateLight() PositionEntity camera,0,0,-10 RotateEntity light,90,0,0 Dim Box(16) For i = 1 To 16 Box(i)=CreateCube() EntityPickMode Box(i),2 EntityColor Box(i),Rnd(255),Rnd(255),Rnd(255) PositionEntity Box(i),Rnd(-10,10),Rnd(-10,10),10 Next While Not KeyDown(1) mx=MouseX() my=MouseY() entity=CameraPick(camera,mx,my) For i = 1 To 16 If entity=0 Then EntityAlpha Box(i),1 If entity<>0 Then EntityAlpha Box(i),Sin( MilliSecs() )*.5+.5 Next UpdateWorld RenderWorld Text 0,0,"DimNummer "+entity Flip Wend End Danke StarGazer |
||
DCSieger des B2D Retro Wettbewerb / Aug 04 |
Mo, Dez 15, 2003 17:59 Antworten mit Zitat |
|
---|---|---|
Hmmm versuch das mal nach dem picken:
Code: [AUSKLAPPEN] for i=0 to 16 if Box(i)=entity then runtimeerror("Entity mit Index "+i+" gewählt") Next |
||
INpac |
Mo, Dez 15, 2003 18:05 Antworten mit Zitat |
|
---|---|---|
hi.
CameraPick() liefert das Handle des gepickten Entities zurück. Das Handle ist die Kennziffer / ID, die zuvor in deine Dim gespeichert wird, in Form von: for i = 0 to ... cube(i) = CreateCube() next in Cube(i) wird dann immer das Handle gespeichert, mit dem du das Entity später weiter behandeln kannst. So. Gehe nun so vor: speichere in eine Variable das Handle des gepickten En. und gehe danach jedes Field inder Dim wo das Handle jedes Entities gepsichert ist durch, und prüfe ob dieses mit dem gepickten übereinstimmt: Code: [AUSKLAPPEN] entity=CameraPick(camera,mx,my) for i = 1 To 16 if entity = box(i) then ; Box(i) ist gepickt, setze jetzt Alpha zB auf 0.5 else ; setze alpha wenn nicht gepickt ist auf 1 endif Next um zu speichern, ob es gepickt wurde, kannst du ne 2diemsionale Array nehmen, bei der der 1. eintrag den Index wie eben darstellt und der 2. eintrag 1 für gepickt oder 0 für nicht gepickt speichert. Code: [AUSKLAPPEN] Dim Box(16,1) |
||
StarGazer |
Di, Dez 16, 2003 20:43 Antworten mit Zitat |
|
---|---|---|
Danke
da hätte ich selbst drauf zu können, dumm von mir |
||
Shodan |
Mi, Dez 17, 2003 22:03 Antworten mit Zitat |
|
---|---|---|
es gibt noch einen Trick, um den for-next suchlauf zu umgehen.
gib jedem entity als namen die nummer im dim-feld.: dim cube(100,1) For a=1 to 100 cube(a,0)=createCube() NameEntity cube(a,0),str$(a) next beim Abfragen mit Pick erhälst du auch den Namen, und damit die nummer im dim-Feld. test=entityPick name$=entityName(test) nummer=val(name$) das spart Rechenzeit. vor allem bei grossen Feldern. Man kann es erweitern, wenn man mehrere Felder hat. NameEntity cube(a,0),"cube"+str$(a) |
||
StarGazer |
Do, Dez 18, 2003 0:32 Antworten mit Zitat |
|
---|---|---|
COOL danke,
gleich mal ausprobieren |
||
Übersicht BlitzBasic Blitz3D
Powered by phpBB © 2001 - 2006, phpBB Group