Physik--->Hilfe bei entitydistance

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

MaTrixCruiser

Betreff: Physik--->Hilfe bei entitydistance

BeitragSo, Apr 24, 2005 11:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Tach.
Manche kennen mich( viele nicht).
Egal.

Mein Problem:
Wie kann ich es machen das ein entity die distance zu einem anderen entity nicht überschreitet.
Ich will nicht das ein objekt weiter als(z.b) 5 von einem anderen wegkommt.
Habt ihr da irgend welche hilfen für mich.

Brauche es für Tuch-physik. Bis jetzt ist alles schon toll doch das Tuch lässt sich bis in das unendliche dehnen. Was kann man da machen?
Amd 64 3200+ (939 winchester)
nvidea 6600gt (PCI-E)
1024 ddr400
200GB HDD
S

tft

BeitragSo, Apr 24, 2005 12:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi...

die einfachste Methode ist, mittels EntityDistance zu testen und dann zu reagieren.

1. distance und position object x und object y merken
2. objecte bewegen
3. distance prüfen
5. Das object das sie Distance nicht ferlassen darf muss auf die alten xy werte zurückgestellt werden wenn der wert z.B >5 ist.

das wars schon. Keine Mathe nötig.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

MaTrixCruiser

BeitragSo, Apr 24, 2005 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut danke.
Gibt es da denn keine schnellere möglichkeit?
Amd 64 3200+ (939 winchester)
nvidea 6600gt (PCI-E)
1024 ddr400
200GB HDD
S

MaTrixCruiser

BeitragSo, Apr 24, 2005 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Was hast du so für Physik drinne.
Amd 64 3200+ (939 winchester)
nvidea 6600gt (PCI-E)
1024 ddr400
200GB HDD
S
 

BurningSoul

Betreff: distanz verändern

BeitragSo, Apr 24, 2005 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich hätte noch ne möglichkeit,
die wesentlich weniger code braucht - ob sie schneller ist ,weiss ich nicht ,da das ganze dann blitz intern geregelt wird ...

also mein Plan:
erschaffe doch einfach ne Sphere , die du auf den gewünschten Abstand skalierst - diese machst du mit entityalpha unsichtbar,
mit entityparent setzt Du dein objekt, dem man sich nicht nähern soll als parent für die sphere ein,
und dann setzt du einen collisionstyp fest, (mit entitytype),
für ziel und quellobjekt,
und überprüfst dann beim normalen collisionscheck einfach ,
ob objekte dieses typs collidiert sind - weiterer code ich nicht erforderlich,
denn auch wenn du auf die collision nicht reagierst,
so werden automatisch ämtliche bewegungen gestoppt - das wirkt sich wie ein unsichtbarer schild aus -damit verhinderst du,
das objekte deinem objekt zu nah kommen -
willst du, das keiner deinem quellobjekt mehr entkommt,
so verwende ein FlipMesch um deine Sphere.

Hat natürlich den Nachteil, das objekte, denen deine Quelle sich nähert nicht automatisch weggedrückt werden,
DAS müsstest Du dann doch von hand machen !

Mfg, Soul!

Vertex

BeitragSo, Apr 24, 2005 22:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Die einfachste Möglichkeit wäre ja einfach ein Boundingsphere via EntityRadius festzulegen, aber warum einfach wenn es auch kompliziert geht Wink
mgh olli
vertex.dreamfall.at | GitHub
 

BurningSoul

Betreff: weil:

BeitragSo, Apr 24, 2005 23:26
Antworten mit Zitat
Benutzer-Profile anzeigen
ganz einfach ,weil dieses objekt vielleicht noch auf 'normale' kollisionen reagieren können muss .... schätz ich mal Wink

MaTrixCruiser

BeitragMo, Apr 25, 2005 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Also danke schon mal.
Die Ansätze sind schon nicht schlecht.
Aber wenn ich Collision da rein mache wird das zu Langsam.
Ich gebe euch nun was was noch keiner hatte : den GANZEN tunch code.
Das problem ist das er noch nicht fertig ist.
Ich habe vestgestellt das es das problem mit der distance gar nicht ist sonder: Sage ich nach dem der code kommt.
BlitzBasic: [AUSKLAPPEN]

Graphics3D 640,480,32,2
SetBuffer BackBuffer()

cam=CreateCamera()
PositionEntity cam,0,0,0
Dim cube(1000)
sphere=CreateSphere()
PositionEntity sphere,-50,0,100


light=CreateLight()
RotateEntity light,90,90,0

cube_t=2
cube2_t=1
cube3=CreateSphere()
PositionEntity cube3,0,0,0
ScaleEntity cube3,16,1,20
EntityType cube3,cube_t

tuch_H=10
tuch_W=10
mesh=3
For a=0 To tuch_H
For b=0 To tuch_W

cube(c)=CreateCube()
PositionEntity cube(c),10-(a*mesh),20,10-(b*mesh)
EntityType cube(c),cube2_t
EntityPickMode cube(c),2,1
EntityRadius cube(c),1
EntityColor cube(c),Rand(0,2)*100,Rand(0,2)*100,Rand(0,2)*100
c=c+1
Next
Next
c=0
a=0
b=0
sphere2=CreateSphere()
PositionEntity sphere2,20,0,100

For a=0 To tuch_H
For b=0 To tuch_H


If a=0 And b=0 Then create2parentobj(cube(c),cube(c+1),mesh,cube(c+(tuch_H+1)),mesh)
If a=tuch_H And b=0 Then create2parentobj(cube(c),cube(c+1),mesh,cube(c-(tuch_H+1)),mesh)
If a=tuch_H And b=tuch_H Then create2parentobj(cube(c),cube(c-(tuch_H+1)),mesh,cube(c-1),mesh)
If a=0 And b=tuch_H Then create2parentobj(cube(c),cube(c+(tuch_H+1)),mesh,cube(c-1),mesh)

If a=0 And b>0 And b<tuch_H Then create2parentobj(cube(c),0,mesh,cube(c-1),mesh): create2parentobj(cube(c),cube(c+1),mesh,0,mesh):create2parentobj(cube(c),cube(c+(tuch_H+1)),mesh,0,mesh)
If a=tuch_H And b>0 And b<tuch_H Then create2parentobj(cube(c),0,mesh,cube(c+1),mesh): create2parentobj(cube(c),cube(c-1),mesh,0,mesh):create2parentobj(cube(c),cube(c-(tuch_H+1)),mesh,0,mesh)
If b=0 And a>0 And a<tuch_H Then create2parentobj(cube(c),cube(c-(tuch_H+1)),mesh,cube(c+(tuch_H+1)),mesh):create2parentobj(cube(c),cube(c+1),mesh,0,mesh);
If b=tuch_H And a>0 And a<tuch_H Then create2parentobj(cube(c),cube(c-(tuch_H+1)),mesh,cube(c+(tuch_H+1)),mesh):create2parentobj(cube(c),cube(c-1),mesh,0,mesh)

If b>0 And b<tuch_H And a>0 And a<tuch_H Then
create2parentobj(cube(c),cube(c-1),mesh,cube(c+1),mesh)
create2parentobj(cube(c),cube(c-(tuch_H+1)),mesh,cube(c+(tuch_H+1)),mesh)
; EntityColor cube(C),0,255,0
EndIf

c=c+1
;RenderWorld
;Flip
Next
Next

kable=2


Collisions cube2_t,cube_t,2,2
Repeat
get_speedloster()


RotateEntity cam,rxm,rym,0
PositionEntity cam,EntityX(cube3),EntityY(cube3),EntityZ(cube3)
MoveEntity cam,0,0,-50
rxm=rxm-my
rym=rym+mx



If KeyDown(200) Then MoveEntity cube3,0,1,0
If KeyDown(208) Then MoveEntity cube3,0,-1,0
If KeyDown(203) Then MoveEntity cube3,-1,0,0
If KeyDown(205) Then MoveEntity cube3,1,0,0
If entity2>0 Then
If KeyDown(17) Then MoveEntity entity2,0,1,0
If KeyDown(31) Then MoveEntity entity2,0,-1,0
If KeyDown(30) Then MoveEntity entity2,-1,0,0
If KeyDown(32) Then MoveEntity entity2,1,0,0
EndIf
mx=MouseXSpeed()
my=MouseYSpeed()
mxx=MouseX()
myx=MouseY()
If MouseHit(1) Then entity=CameraPick(cam,mxx,myx)
If entity>0 Then
EntityColor entity,255,0,0
If entity2>0 Then EntityColor entity2,255,255,255
entity2=entity
EndIf

c=0
If KeyHit(28) Then graph=1-graph
If graph=0 Then
For a=0 To tuch_H
For b=0 To tuch_H
;c=c+1
TranslateEntity cube(c),0,-0.1,0
c=c+1
Next
Next
EndIf


If MouseDown(2) Then MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
update_twop
update_speedloster()
UpdateWorld
RenderWorld
;Text 1,1,stretch+\"---\"+EntityDistance#(cube2,cube)
Flip 1
Until KeyDown(1)

Type sper
Field model,xr#,yr#,zr#,xr2#,yr2#,zr2#
Field mx#,my#,mz#
End Type


Function create_speedloster(model)
sper.sper=New sper
sper\model=model
End Function

Function get_speedloster()
For sper.sper=Each sper
sper\xr#=EntityX#(sper\model)
sper\yr#=EntityY#(sper\model)
sper\zr#=EntityZ#(sper\model)
Next
End Function

Function update_speedloster()
For sper.sper=Each sper
;If sper\mx# And =0 Then
MoveEntity sper\model,sper\mx#,sper\my#,sper\mz#
sper\xr2#=EntityX#(sper\model)
sper\yr2#=EntityY#(sper\model)
sper\zr2#=EntityZ#(sper\model)
sper\mx#=(sper\xr2#-sper\xr#)*0.80
sper\my#=(sper\yr2#-sper\yr#)*0.80
sper\mz#=(sper\zr2#-sper\zr#)*0.80
Next
End Function
Type twop
Field obj,parent,dis#,fall#
Field parent2,dis2#
End Type
;create2parentobj(cube,sphere,5,cube3,5)
;create2parentobj(cube3,cube2,5,cube,5)
;create2parentobj(cube2,cube3,5,sphere2,5)
;create2parentobj(cam,cube3,5,sphere2,5)
;EntityParent cam,cube3
Function create2parentobj(obj,parent,dis#,parent2,dis2#)
twop.twop=New twop
twop\obj=obj
twop\parent=parent
twop\dis#=dis#
twop\parent2=parent2
twop\dis2#=dis2#

End Function




Function update_twop()
For twop.twop=Each twop

If twop\parent2>0 Then stretch2#=EntityDistance#(twop\parent2,twop\obj)-twop\dis2#

If twop\parent>0 Then
stretch#=EntityDistance#(twop\parent,twop\obj)-twop\dis#
; If EntityDistance#(twop\obj,twop\parent)>twop\dis# Then MoveEntity twop\obj,0,0,-stretch#
If (stretch#)>1 Then stop1=1;MoveEntity twop\obj,0,0,stretch#
PointEntity twop\obj,twop\parent
MoveEntity twop\obj,0,0,stretch#/2

;If twop\parent= twop\obj Then EntityParent twop\obj,twop\parent
EndIf


If twop\parent2>0 Then
; If EntityDistance#(twop\obj,twop\parent2)>twop\dis2# Then MoveEntity twop\obj,0,0,-stertch2#
If (stretch2#)>1 Then stop2=1
PointEntity twop\obj,twop\parent2
MoveEntity twop\obj,0,0,stretch2#/2

EndIf
;If (stop2 And stop1)=1 Then twop\fall#=0
;

;twop\fall#=twop\fall#+0.001
;MoveEntity twop\obj,0,-twop\fall#,0

;MoveEntity twop\obj,0,0,stretch#/2
;
;stretchmaster#=stretch#+stretch2#/2


Next
End Function



Ich hoffe das er euch gefallen hat.

Die funktion speedloster hat garnichts mit dem tuch zu tuhen.
Amd 64 3200+ (939 winchester)
nvidea 6600gt (PCI-E)
1024 ddr400
200GB HDD
S

MaTrixCruiser

BeitragMo, Apr 25, 2005 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein problem:

Wie kann man es machen dass, das Objekt zu beiden "parents" hinschaut.
Es ist nämlich so das das Objekt zu dem einen hinschaut und dann hinbewegt wird. Das es sich immer zum letzten Objekt hinbewegt.

Das problem ist zu komlieziert. ODer?

Ich mach mal einen code wo es besser zum vorschein kommt.
Amd 64 3200+ (939 winchester)
nvidea 6600gt (PCI-E)
1024 ddr400
200GB HDD
S

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group