Sprites in Types und Kollisionsabfrage dieser
Übersicht

![]() |
hecticSieger des IS Talentwettbewerb 2006Betreff: Sprites in Types und Kollisionsabfrage dieser |
![]() Antworten mit Zitat ![]() |
---|---|---|
[Alle hier genannten Themen sind erledigt]
Hallo, habe in B3D ein Thrust-Klon (2D) geproggt und schon zwei Probleme dazu. 1) Ich möchte Rauchpartikel in Form von Sprites mit hilfe von Types einbinden. Müsste aber immer per CopyEntity neue Partikel erstellen. Das Problem: Wie kann ich mit Type-Delete ein Sprite wieder löschen wenn die Zeit des Rauchpartikels abgelaufen ist, ohne später einen Überlauf der Anzahl Partikel zu erzeugen zugleich aber jeden Partikel einzelnd ansprechen können muß? 2) Wie kann ich für jeden Partikel einzelnd eine Kollisionsprüfung (per EntityRadius) machen und nach einer Kollision das einzelne Partikel ansprechen damit ich deren 'Abprallwinkel' neu berechnen kann? Problem ist ja, daß per EntityType eine Kollision durchgeführt wird, ich aber für jeden Partikel nach einer Kollision die Richtung neu berechnen muß, was bei Collisions dann für alle Partikel gild. Möchte nicht ~Partikel(0) und EntityType 3, Partikel(1) und EntityType 4, usw. Und jetzt mal ein wenig Code, wie ich bisher den Abprallwinkel des Raumschiffes berechnet habe. Code: [AUSKLAPPEN] Collisions 1,2,2,2
UpdateWorld If CountCollisions(schiff)>0 Then nx#=CollisionNX(schiff,1) ny#=CollisionNY(schiff,1) w1=ATan2(yg,xg) w2=ATan2(ny,nx) w3=180+(w2*2)-w1 speed#=Sqr(xg^2+yg^2)/1.2 xg=Cos(w3)*speed yg=Sin(w3)*speed xp=xpa ;alte X-Position (keine Kollision) zurrücksetzen yp=ypa ;alte Y-Position (keine Kollision) zurrücksetzen End If xp = X-Position Schiff yp = Y-Position Schiff xg = X-Geschwindigkeit Schiff yg = Y-Geschwindigkeit Schiff nx = Kollisionswinkel (EntityRadius Schiff) relativ in X ny = Kollisionswinkel (EntityRadius Schiff) relativ in Y w1, w2, w3 = Hilfsvariablen zur Berechnung neuen Winkels speed = Neue Geschwindigkeit in neue Richtung In gleicher Art wollte ich eine Kollisionsprüfung der Partikel machen, damit sie von den Wänden abprallen wenn sie kollidiert sind. Danke im vorraus... |
||
- Zuletzt bearbeitet von hectic am Mo, Jan 16, 2006 21:47, insgesamt einmal bearbeitet
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
mhh...sry aber ich versteh leider nicht was du genau meinst aber ich denke jetzt einfach mal du willst sowas hier
Code: [AUSKLAPPEN] ;rauch erzeugen rauch.rauch=new rauch rauch\x=schiffx rauch\y=schiffy rauch\xspeed=ka irgend ne formel musst du dann ja wissen wegen wind usw.. rauch\yspeed=s.o. usw... for r.rauch=each rauch ;Kollision If kollision(rauch\gfx,raumschiff)=true then xspeed=xspeed*(-1):yspeed=yspeed*(-1) ;Counter+löschen r\counter=r\counter+1 if r\counter=500 then delete r next sry wenn ich dich komplett falsch verstanden hab...achja und zugreifen kannste jetzt per first last before und after...hoffe es hilft dir weiter! |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi 5k41, das Problem ist, daß erstellte Sprites in 3D einmal vorhanden 'immer' vorhanden bleiben. Man malt nicht auf dem Bildschirm mit einem Sprite wie mit einem Stempel (DrawImage), sondern man positioniert sie und lässt die Grafikkarte rendern. Wenn man 10 gleiche Sprites darstellen will, muß mal 10 Sprites erstellen (zB mit CopyEntity) und entsprechend alle einzelnd positionieren. Sie werden erst nach RenderWorld sichtbar gemacht. Ich möchte vermeiden, immer mit CopyEntity neue zu erstellen da dann irgendwann ein Überlauf kommen könnte?!?
~Habe mal weiter rumprobiert und habe schon wieder ein neues Problem. Habe es jetzt mal mit Dim versucht (da kann man wenigstens jedes einzelnd immer 'wieder' verwenden). Problem: Wenn ich Sprites anzeige (EntityAlpha Sprite,1) und sie während einer Animationsphase langsam ausblende, beliben sie logischerweise dann 'irgendwo' unsichtbar (EntityAlpha Sprite,0) stehen. Werden sie dann wieder neu gebraucht, werden sie wieder an die Düse meines Schiffes positioniert. Wenn ich aber in der Zwischenzeit um ein paar Ecken geflogen bin, bleiben sie hinter dem Nirvana hängen und kommen nicht mehr an meine Düse ran, da sie immernoch eine Kollisionsprüfung haben... Hoffe es ist verständlich. /EDIT: Ausserdem wird eine Kollisionsprüfung (in meinem Fall) für alle Sprites benutzt. Wenn jedes einzelne eine Kollisionsprüfung bekommen soll, dann müsste ich Collisions 3,2,2,2:Collisions 4,2,2,2: Collisions 5,2,2,2... machen. Das währe (denke ich) nicht Sinnvoll. Wie geht sowas?[/u] |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ah ok nun hab ich das problem gerafft....zu deinem versuch: mach es doch einfach so das du die kollision auch nochmal in eine if abfrage setzt, so dass sie ausserkraft tritt,sobal der alpha wert 0 ist oder so... | ||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
Klaas |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
schalte die Sprites doch mit "HideEntity" ab wenn der Alphawert auf Null steht. Soweit ich weiß werden hidden Entities bei der Kollision nicht mit berücksichtigt. | ||
Darren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oder du löschst sie dann einfach wieder. mit freeentity | ||
MFG Darren |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Klaas, danke das hat wunderbar geklappt! ![]() @DarrenSharm, geht das denn? Ich muß doch CopyEntity eine Nummer geben. Also beispiel: Code: [AUSKLAPPEN] Dim partikel(299)
For q=1 To 299 partikel(q)=CopyEntity(partikel(0)) Next Eine Mischung von Dim-Arrays und Types kann ich mir noch nicht vorstellen. |
||
![]() |
Black Spider |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Hectic!
doch, eine Mischung aus Sprites und Dim´s wäre nicht unmöglich (aber unsinnig ![]() was die kollision angeht, nimm HideENtity, oder lösch die Kollision wenn alpha<0 ist [syntax="bb"] if rauch\alpha < 0 Then EntityType rauch\sprite,0 Else EntityType rauch\sprite, type_rauchsprite End if [/syntax] aber hideEnitty funzt auch wunderbar . |
||
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif |
![]() |
hecticSieger des IS Talentwettbewerb 2006Betreff: Sprites in Types und Kollisionsabfrage [erledigt] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Black Spider, habe es jetzt doch mal mit Dim's gemacht. Das Problem ist, daß ich nach einer Kollision eines Sprites meine eigene Richtungsänderung machen will. Die Sprites sind Rauchwolken die aus der Düse meines Raumschiffes kommen. Wenn sie mit einer Wand kollidieren, dann sollen sie sich seitlich weg bewegen und nicht da langsam 'rumsliden'. Muß also eine eigene Winkelberechnung her. Habe gerstern (bzw. heute Früh) bis 6 Uhr daran rumgearbeitet. Das testen der einzelnen Sprites kann ich mit If CountCollisions(partikel(i))>0 Then durchführen (endlich), und trotz 300 Sprites keine Recourcenverschwendung...
Es sind also immer 300 Sprites in Einsatz. Und werden nacheinander zur Verwendung gebracht, bis sie auslaufen und per HideEntity unsichtbar gemacht werden. Ein Datenroulette also. Werden mal mehr als 300 Sprites zur gleichen Zeit benötigt, dann werden die ältesten gelöscht und für aktuelle Darstellung genommen, kommt aber eigentlich nicht vor... Ich danke allen die mir geholfen haben... Bin auf jeden Fall schon einen ganzen Schritt weiter gekommen... ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group