[edit] achso, der extra parameter, wenn gruppe a mit gruppe b, dann bspw. stopp, oder sliding.und hinterher kann man ja noch einzeln entscheiden, was das entity machen soll.
nein, die bisherigen Gruppenkollisionen sind nur da um rechenleistung zu sparen, sonst würde immer alles gegen alles geprüft werden, und so kann man das auf gruppen und deren prüfmethoden begrenzen.
und deine entity-entity methode ist toll, aber eben trotzdem gruppenabhängig.
hier mal stück code, so hab ich das gemacht.
LOCAL gplayer = 101
LOCAL ground = 102
light = EntityCreateLight(RGB(255,255,255) )
camera=EntityCreateCamera()
EntitySetCameraRange(camera,1,1000)
level = EntityLoadMesh("level.ddd")
leveltex=EntityLoadTexture("level.bmp")
EntityApplyTexture(level, leveltex, -1 )
EntitySetGroup(level, ground)
juru = EntityLoadMesh("juru.ddd")
jurutex=EntityLoadTexture("juru.bmp")
EntityApplyTexture(juru, jurutex, -1 )
EntityCollisionSetRadius(juru, 0.4)
EntitySetGroup(juru, gplayer)
stumpf = EntityLoadMesh("stumpf.ddd")
stumpftex = EntityLoadTexture("stumpf.bmp")
EntityApplyTexture(stumpf, stumpftex, -1)
EntityScale(stumpf, 20, 20, 20)
stamm = EntityLoadMesh("stamm.ddd")
stammtex = EntityLoadTexture("stamm.bmp")
EntityApplyTexture(stamm, stammtex, -1)
EntitySetPosition(level, 0, 0, 0)
EntitySetPosition(stumpf, -2, 10, -2)
EntitySetPosition(stamm, 10, 19, 0)
EntitySetPosition(camera, 0, 7, -15)
EntitySetRotation(stamm, 0, 70, 0)
EntitySetPosition(juru, 0, 10, 5)
EntitySetRotation(camera, 15, 0, 0)
EntityParent(light, juru)
EntityParent(camera, juru)
EntityTranslate(light, 0, 2, -2)
EntityEnable(camera, TRUE)
//Kollisionsgruppen initialisieren
EntityAddCollision(gplayer, ground, 0)
//
WHILE TRUE
GOSUB Kollisionen
GOSUB Movement
GOSUB UpdateMovement
EntityDrawSystem()
EntityUpdateCollisions()
X_MAKE2D
PRINT updown, 10, 10
PRINT EntityGetY(juru), 10, 20
SHOWSCREEN
WEND
SUB Kollisionen:
LOCAL ncol = EntityCollisionCount(juru)
FOR i = 1 TO ncol
IF EntityCollisionEntity(juru, EntityGetName$(i)) = level THEN collevel = 1
NEXT
ENDSUB
SUB Movement:
//Sprung
IF collevel = 1
updown = 0.01
collevel=0
IF KEY(57) THEN updown=0.5
ELSE
updown=updown-0.02
ENDIF
// drehen und bewegen
IF KEY(203) THEN jy = 1
IF KEY(205) THEN jy = -1
IF KEY(200) THEN jz = 0.5
IF KEY(208) THEN jz = -0.5
ENDSUB
SUB UpdateMovement:
EntityRotate(juru, 0, jy, 0)
EntityMove(juru, 0, 0, jz)
EntityMove(juru,0,updown,0)
EntityRotate(stamm, 0, 0, 1)
jy=0;jz=0
ENDSUB
aber ich denk, auch, dass es einfacher gehen müsste.
naja, so wie es momentan ist, kommen wa och klar.
achja, mesh is polygonkollision, oder?
und kann man um EntityDebug mode auch die kollisionsradien und boxen sichtbar machen, wäre vielleicht hilfreich.
um bspw. eine box an ein objekt anzupassen.