Kazik1 Opublikowano 8 Marca 2012 Udostępnij Opublikowano 8 Marca 2012 Robię swoją pierwszą grę w gmogre,mam już 2 lvl,modele z 3dsmaxa i nawet 1 obiekt z animacją. Gra jest FPS'em mam kolizję ze ścianami i innymi obiektami ale mam problem.Ponieważ chcę zrobić tak aby obj_player po zetknięciu się z obj_przejscie przeniosło go do innego room'a.Proszę o pomoc!!! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Marca 2012 Administratorzy Udostępnij Opublikowano 8 Marca 2012 GML room_goto(nazwa); w evencie kolizji ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kazik1 Opublikowano 8 Marca 2012 Autor Udostępnij Opublikowano 8 Marca 2012 w evencie kolizji być nie może bo wywala,musiało by być to jakoś w step zrobione np. GML /*obj_Player STEP: */ if(kolizja_z_obj_przejscie) { room_goto(castle2) } tam gdzie kolizja_z_obj_przejscie potrzebuje kodu (lub skryptu) z biblioteki 3DGmOgre. Szukałem w helpie dołączonym do biblioteki ale znalazłem tylko jakieś funkcję których nie wiem jak użyć i czy w ogóle działają ;[ w tym szukałem: NewtonContactFunction: Overview Newton contacts cannot be created manually. Instead they are generated automatically by GMOgre3D whenever a Newton material collision occurs. If a collision does occur, and you have a callback setup using the SetNewtonMaterialPairContactCallback function, then a Newton contact object will be passed to the callback script. For more information on this process, see SetNewtonMaterialPairContactCallback. GetNextNewtonContact(real newton_contact_id) -------------------------------------------------------------------------------- Returns the ID of the next Newton contact object in a collision, if any. Parameters newton_contact_id - The ID of the Newton contact object. są jeszcze inne funkcję to była jedna z nich ale nie działa. Przypominam że chcę zrobić tak że obj_player po kolizji z obj_przejście przeniosło go do innego roomu. Mogę jeszcze dodać dane obj_player & obj_przejście: GML //Obj Player //Create global.can_id=1; can=0; // Set initial position, yaw, and velocity x = 0; y = 0; z = 1; forward_speed = 0; side_speed = 0; dir = 0; // Create ellipsoid entity to represent the player ent_id = CreateEntity("ellipsoid.mesh"); node_id = CreateRootChildSceneNode(); AttachEntityToSceneNode(ent_id, node_id); SetSceneNodeScale(node_id, 1, 1, 2.5); SetEntityMaterial(ent_id, "Simple/dirt01"); // Hide ellipsoid so player doesn't look down and see it HideEntity(ent_id); // Create the collision mesh for the player col_id = CreateNewtonEllipsoidCollision(global.world2, 0.5, 0.5, 1.0); body_id = CreateNewtonBody(global.world2, col_id); CalculateNewtonConvexCollisionInertia(col_id); SetNewtonBodyMassMatrix(body_id, 50, 50*GetX(), 50*GetY(), 50*GetX()); CalculateNewtonConvexCollisionCenterOfMass(col_id); SetNewtonBodyCenterOfMass(body_id, GetX(), GetY(), GetZ()); DestroyNewtonCollision(col_id); // Attach Newton body to scene node for auto updates AttachNewtonBodyToSceneNode(body_id, node_id); // Attach scene node to this object for auto updates AttachSceneNodeToGMInstance(node_id, id); SetNewtonBodyPosition(body_id, x, y, z); EnableNewtonBodyAutoSleep(body_id, false); // The Newton PlayerController handles all interaction with // the body and the environment (ie, hitting walls, walking // up stairs, etc)! controller_id = CreateNewtonPlayerController(body_id); //Step // Set new velocity for our player SetNewtonPlayerControllerVelocity(controller_id, forward_speed, side_speed, dir); //BeginStep // Get new direction dir = GetCameraYaw(obj_camera.camera_id); // Reset velocity forward_speed = 0; side_speed = 0; GML //Obj_przejscie //CREATE /* Create floor entity floor_id = CreateFloorEntity(75, 75, 50, 50, 10, 10); SetEntityMaterial(floor_id, "Examples/Rockwall"); EnableEntityCastShadows(floor_id, false); /Attach floor entity to scene node and position it node_id = CreateRootChildSceneNode(); AttachEntityToSceneNode(floor_id, node_id); */ ent_id = CreateEntity("przejscie.mesh"); node_id = CreateRootChildSceneNode(17,-36,0.5); AttachEntityToSceneNode(ent_id, node_id); SetSceneNodeScale(node_id, 0.4.3, 0.4.3, 0.4.3); EnableEntityCastShadows(ent_id, true); col_id = CreateNewtonTreeCollisionFromEntity(global.world2, ent_id, true); body_id = CreateNewtonBody(global.world2, col_id); DestroyNewtonCollision(col_id); AttachNewtonBodyToSceneNode(body_id, node_id); YawSceneNode(node_id,90); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
XBlacKX Opublikowano 8 Marca 2012 Udostępnij Opublikowano 8 Marca 2012 daj niewidzialną ścianę, po której zetknięciu z obj_player przeniesie cię do innego rooma Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Marca 2012 Administratorzy Udostępnij Opublikowano 8 Marca 2012 czy obiekty przesuwają się po planszy (roomie), czy tylko w silniku 3d (tzn. czy zmienne x i y się zmienają) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 8 Marca 2012 Udostępnij Opublikowano 8 Marca 2012 To powoduje AttachSceneNodeToGMInstance że ciało z newton engine podpina się pod wbudowane zmienne GMa Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kazik1 Opublikowano 8 Marca 2012 Autor Udostępnij Opublikowano 8 Marca 2012 XBlacKX - właśnie nie wiem jak zrobić "po której zetknięciu z obj_player przeniesie cię do innego rooma" ;[ gnysek - tylko w silniku HuderLord - Mogę się dowiedzieć czegoś więcej na temat AttachSceneNodeToGMInstance podać nawiasy z zmiennymi? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 8 Marca 2012 Udostępnij Opublikowano 8 Marca 2012 Już zapomniałem jak się używa GMOgre tutaj jest moja gra w nim zrobiona open sourcowa https://forum.gmclan.org/index.php?showtopic=27709 Poszperam w projekcie to może mi się przypomni co i jak :P edit: :o newton ponga ściągnięto 88 razy nie spodziewałem się tego :D Edit 2: Ok z tego co widzę w newton pongu do rozpoznawania z czym się zderzyła piłka, by odtworzyć odpowiedni do danej powierzchni i prędkości piłki dźwięk, skorzystałem z funkcji SetNewtonMaterialPairContactCallback( id materiału , skrypt który się uruchamia); SetNewtonMaterialPairContactCallback(real newton_material_pair_id, real func) -------------------------------------------------------------------------------- Sets a GM script callback function to be called whenever the two materials in the material pair collide. When this GM script function is called the first and second parameters will be the two Newton bodies that are involved in the collision. The third parameters will be the collision speed, and the forth through sixth parameters will be the collision point in world space. Parameters newton_material_pair_id - The ID of the Newton material pair. func - The GM script function to call. Ja akurat potrzebowałem tylko wiedzieć z jaką prędkością piłka uderzyła w powierzchnię więc w skrypcie użyłem tylko argumentu2. argument0 i argument1 to body_id kolidujących ciał argument2 - prędkość uderzenia, argument3 4 i 5 to miejsce uderzenia X Y Z. Po kolei co trzeba zrobić by takie rozpoznawanie kolizji działało. 1. Stworzyć 2 newton materiały. Najlepiej by id tych materiałów były w globalnych zmiennych GML (create) globalvar nMat, nMatPair; nMat[0] = CreateNewtonMaterial( nWorld ); nMat[1] = CreateNewtonMaterial( nWorld ); 2. Stworzyć Newton material pair i nadać mu callback GML (create) nMatPair[0] = CreateNewtonMaterialPair( nWorld, nMat[0] , nMat[1] ); // w 2 parametrze wpisujesz nazwe skryptu który ma się uruchomić po wykryciu kolizji SetNewtonMaterialPairContactCallback( nMatPair[0], teleportacjaCallBack); 3. Teraz tworzysz ten skrypt który kolizja wywoła. GML (teleportacjaCallBack) // teleportacjaCallBack(); room_goto(castle2) 4. Nadaj newton materiały ciałom GML (create) // ciało pierwsze SetNewtonBodyMaterial( id ciała gracza, nMat[0] ); // ciało drugie SetNewtonBodyMaterial( id ciała portalu, nMat[1] ); Nie ma potrzeby wkładania żadnych warunków do stepu bo newton engine sam wywoła skrypt teleportacjaCallBack() gdy zajdzie kolizja Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się