kann mir bitte jemand helfen rollender stein

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • kann mir bitte jemand helfen rollender stein

    hy

    also ich wollte einen rollenden stein machen hab es auch teilweise hinbekommen also hab im gravity gegeben und dann noch ein collision event mit vspeed+=4; zum abbrallen vom boden und wenn der player näher kommt soll er den stein schieben und ziehen können


    bitte um hilfe
  • Ich glaub du musst das nicht gleich mit physics lösen.

    Was du brauchst ist eine Kollisionsabfrage ob der Spieler zB 2pixel rechts vom Stein entfernt ist und dann 2pixel nach links rücken. Am besten mit collision_line().
    Zum Ziehen funktioniert das gleich, nur umgekehrt und wasl noch mit einem Tastendruck.

    GML-Quellcode

    1. if collision_line()
    2. {
    3. if keyboard_check()
    4. {
    5. x = spieler.x + abstand_zum_spieler;
    6. }
    7. else
    8. {
    9. x += x - spieler.x;
    10. }
    11. }
    Alles anzeigen

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • @che1974

    danke das tutorial hab ich mir schon angesehn und mit physiks kenn ich mich auch schon aus....wollte es eh machen mit room is physik und dann noch dem ball physik geben aber ich benutze das normale game_save und das funktioniert nicht mit room is physiks.und eine ini save datei wollte ich grad nicht erstellen.

    @Aku_Ryou

    ich werd es mal so probieren thx..an sowas ähnliches hab ich eh auch rumprobiert aber halt mit collision_circle.aber denke auch das collision_line die bessere wahl dafür ist.
    eine frage noch: wie kann ich machen das wenn der player bei einem bestimmten punkt ankommt das dann eine andere instanz bewegt wird und der player nicht.also stell dir
    mehrere stockwerke vor. im 1ten ist der player und im 3 ist ein kleiner roboter.und wenn der player bei einem bestimmten punkt ankommt steuert er dann den roboter.


    @Eddysoulo
    danke für deine antwort ja werds eh so machen.
  • Dann solltest du eine robotcontrol variable erstellen , wenn sie false ist dann läuft alles was den Spieler betrifft und wenn sie true ist dann aööes was den roboter betrifft.

    GML-Quellcode

    1. if robotcontrol == false
    2. {
    3. keyboard_check()
    4. {
    5. x += 4
    6. }
    7. }
    8. else
    9. {
    10. if instance_exists(obj_robot)
    11. {
    12. with(obj_robot)
    13. {
    14. keyboard_check()
    15. {
    16. x += 2
    17. }
    18. }
    19. }
    20. }
    21. }
    Alles anzeigen

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Ja dann legst du ein neues script an, in dem nur der bewegungscode drinnen steht und rufst es auf wenn die variable true oder false ist.

    GML-Quellcode

    1. ///scr_bewegung()
    2. keyboard_check()
    3. {
    4. x += 4;
    5. }


    und im Spieler

    GML-Quellcode

    1. if robotcontrol == false
    2. {
    3. scr_bewegun();
    4. }
    5. else if robotcotnrol == true
    6. {
    7. if instance_exists(obj_robot)
    8. {
    9. with(obj_robot)
    10. {
    11. scr_bewegung()
    12. }
    13. }
    14. }
    Alles anzeigen


    das hat den vorteil, dass du den code nicht zweimal schreiben musst udn sich veränderungen gleich auf beide objecte auswirken.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • ja danke dir echt toll deine hilfe jedes mal finde ich wirklich nett von dir...
    aber ich hab ein problem ich weiß nicht wie ich es sagen soll ,das der objekt player wenn er den bestimmten punkt erreicht ,,plötzlich der roboter ist und der view auch mit geht(bei mir ist view folgt player)

    also im obj_player step event mit

    if place_meeting(x,y,obj_roboportal)
    {
    robocontroll = true;
    }else
    {
    robocontroll = false;
    }


    und dann noch das von dir...auf das step event von obj_player aufgeteilt.






    soll ich für den roboter auch ein step event machen usw...ich bin verwirrt...zurzeit gehts so: also wenn der player zum portal kommt ist es zwar so das ich den roboter bewegen kann er aber nicht fliegt(ich hab ihm gravity gegeben damit er nicht zuleicht zum steuern ist.)
    und das andere problem ist das das normale spieler sprite ganze zeit auf dem punkt weiter rennt also beim portal.......
    und drittens geht der view nicht zum roboter und ihm auch nicht nach...wie mach ich das???

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von acidrain833 ()

  • Da muss was mit der Zuteilung der Befehle nicht ganz stimmen, bzw mit deinen Klammern.
    Poste mal oder schicke mir deinen Step Event code per PN zur Sicherheit.
    Im Prinzip:

    GML-Quellcode

    1. if robotcontrol == false
    2. {
    3. //Spieler bewegen
    4. //Spieler animieren
    5. //checken ob er an der Robotcontrolstation ankommt > robotcontrol == true
    6. }
    7. else if robotcontrol == true
    8. {
    9. with(robot)
    10. {
    11. //bewegen
    12. //animieren
    13. //checken ob wieder kontrolle an den Spieler übergeben werden soll
    14. //view bewegen
    15. }
    16. }
    Alles anzeigen


    die view bewegst du wieder mit einem Skript

    GML-Quellcode

    1. view_xview[0] = x - (view_wview[0]/2);
    2. view_yview[0] = y - (view_hview[0]/2);

    wenn das Skript im with(robot) teil des stepevents ausgeführt wird, dann bezieht sich x und y automatisch auf den roboter statt dem player.

    Im Roboter Object sollte also nix drinnen stehen müssen, außer die Kollision, alles andere wird vom Spieler aus gesteuert.

    Wenn du das so machst, dann bewegt sich auch dein Spieler nicht mit dem Roboter mit. Denn der führt ja sonst nix aus, wenn robotcontrol true ist ausßer alles was er mit with(robot) macht.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • ja ich schick dir mein step event oder poste es hier....


    danke nochmal


    aber eins noch...ich will ja mehrere roboter also der erste soll im 3 stock sein der 2te soll im 8 stock sein usw.....aber wie mach ich es das ich mehrere roboter haben kann.
    also das ich zuerst nur den im 3 stock steuere und dann wenn ich im 7 stock bin den roboter im 8 stock steuere.....


    weil so wie es jetzt ist würde ich dann alle roboter gleichzeitig steuern.....



    hier mein step event:ich hab ein bissl mit dem view herumgespielt und so wie es jetzt ist schaltet er zwar zum 2ten view um aber nicht mehr zurück....

    GML-Quellcode

    1. if place_meeting(x,y,obj_roboportal)
    2. {
    3. wait-=1
    4. if wait<=0
    5. {
    6. global.robotcontroll = true;
    7. wait=60;
    8. }
    9. }else
    10. {
    11. global.robotcontroll = false;
    12. }
    13. if global.robotcontroll == false
    14. {
    15. view_visible[0]=true;
    16. view_visible[1]=false;
    17. view_enabled=true;
    18. if (xp >=5000)
    19. {
    20. xp=0;
    21. global.levelup+=1;
    22. }
    23. if keyboard_check(global.key_interact)&& (pickup==0)
    24. {
    25. image_speed=0.4;
    26. sprite_index=spr_player_pickup;
    27. alarm[1]=40;
    28. pickup=1;
    29. }
    30. else if (mouse_check_button_pressed(mb_left)&& (throw==0)&& !audio_is_playing(snd_throw))
    31. {
    32. global.pfeil-=1;
    33. sprite_index=spr_player_throw;
    34. audio_play_sound(snd_throw,10,false);
    35. image_index = 0;
    36. throw = 1;
    37. alarm[0] = 20;
    38. instance_create(x,y+50,obj_pfeil);
    39. }
    40. if (global.lastpressed=="right")
    41. {
    42. image_xscale=1;
    43. }
    44. else if (global.lastpressed=="left")
    45. {
    46. image_xscale=-1;
    47. }
    48. if (mouse_x < x) && (throw == 1)
    49. {
    50. sprite_index=spr_player_throw;
    51. image_xscale=-1;
    52. }
    53. else if (mouse_x > x) && (throw == 1)
    54. {
    55. sprite_index=spr_player_throw;
    56. image_xscale=1;
    57. }
    58. //!!--Horizontale Geschwindigkeit--!!//
    59. hspeed=0;
    60. //!!--Health Player--!!//
    61. if (hp <=0)
    62. {lives-=1
    63. hp=100;
    64. }
    65. //!!--Wenn die Taste gedrückt wird--!!//
    66. if keyboard_check(global.key_left)
    67. {
    68. scr_movement("left");
    69. global.lastpressed="left";
    70. image_speed=0.3;
    71. sprite_index=spr_player_run;
    72. image_xscale=-1;
    73. }
    74. if keyboard_check_released(global.key_left)
    75. {
    76. sprite_index=spr_player_idle;
    77. image_speed=0.2;
    78. }
    79. if keyboard_check(global.key_right)
    80. {
    81. scr_movement("right");
    82. global.lastpressed="right";
    83. image_speed=0.3;
    84. sprite_index=spr_player_run;
    85. image_xscale=1;
    86. }
    87. if keyboard_check_released(global.key_right)
    88. {
    89. sprite_index=spr_player_idle;
    90. image_speed=0.2;
    91. }
    92. //!!--Schild--!!//
    93. if (global.item1 > 0) && keyboard_check_pressed(global.key_schild)
    94. {
    95. if !instance_exists(obj_schild)
    96. {
    97. global.item1-=1;
    98. instance_create(x,y,obj_schild)
    99. image_speed=0.6;
    100. }
    101. }
    102. //!!--Gravitation--!!//
    103. vspeed+=0.8;
    104. //!!--Schneller Rennen--!!//
    105. if keyboard_check(global.key_shift)
    106. {
    107. movespeed*=2;
    108. }
    109. //!!--Springen--!!//
    110. if keyboard_check_pressed(global.key_up)
    111. {
    112. if place_free(x,y+10) == false
    113. {
    114. jump=1;
    115. vspeed=-12;
    116. }
    117. }
    118. //!!--Sprunghöhe ändern--!!//
    119. if keyboard_check_released(global.key_up)
    120. {
    121. if (vspeed < 0)
    122. vspeed /=2;
    123. }
    124. if place_free(x,y+10) //Abfrage wenn wir springen dann sollen die sprites verwendet werden und wenn wir am boden sind diese sprites....
    125. { //In der Luft
    126. if global.lastpressed == "right"
    127. sprite_index =spr_player_jump // Nach Rechts Schauen
    128. else
    129. sprite_index = spr_player_jump // Nach Links Schauen
    130. }
    131. //!!--Leiter hochklettern--!!//
    132. if place_meeting(x,y,obj_leiter) == true
    133. {
    134. if keyboard_check(global.key_up)
    135. {
    136. image_speed=0.3;
    137. sprite_index=spr_player_klettern;
    138. vspeed=-4;
    139. }
    140. else
    141. if keyboard_check(global.key_down)
    142. {
    143. image_speed=0.3;
    144. sprite_index=spr_player_klettern;
    145. vspeed=4
    146. }
    147. else
    148. {
    149. image_speed=0;
    150. sprite_index=spr_player_klettern;
    151. vspeed=0;
    152. }
    153. }
    154. }else
    155. if global.robotcontroll == true
    156. {
    157. view_visible[0]=false;
    158. view_visible[1]=true;
    159. view_enabled=true;
    160. if instance_exists(obj_robot)
    161. {
    162. with(obj_robot)
    163. {
    164. scr_robomove();
    165. }
    166. } }
    167. //!!--Kollisionserkennung links rechts--!!//
    168. if place_free(x+hspeed,y) == false
    169. {
    170. if (hspeed > 0){
    171. move_contact_solid(0,-1)} ///0 ist rechts 180 ist links
    172. if (hspeed < 0){
    173. move_contact_solid(180,-1)}
    174. hspeed=0;
    175. }
    176. //!!--Kollisionserkennung oben unten--!!//
    177. if place_free(x,y+vspeed) == false
    178. {
    179. if (vspeed > 0){
    180. move_contact_solid(270,-1)} ///270 ist unten 90 ist oben
    181. if (vspeed < 0){
    182. move_contact_solid(90,-1)}
    183. vspeed=0;
    184. }
    185. //!!--Nicht an Ecken hängen bleiben--!!//
    186. if place_free(x+hspeed,y+vspeed) == false
    187. {
    188. hspeed=0;
    189. }
    190. //!!--View--!!//
    191. view_xview= ((x-view_wview/2)+view_xview*9)/10;
    192. view_yview= ((y-view_hview/2)+view_yview*9)/10;
    193. //!!--View nicht aus dem Raum--!!//
    194. if (view_xview <0)
    195. {
    196. view_xview=0;
    197. }
    198. if (view_yview <0)
    199. {
    200. view_yview=0;
    201. }
    202. if (view_xview > room_width-view_wview)
    203. {
    204. view_xview=room_width-view_wview;
    205. }
    206. if (view_yview > room_height-view_hview)
    207. {
    208. view_yview=room_height-view_hview;
    209. }
    Alles anzeigen



    und dann hab ich noch beim robotercontroller also dort wo der player ankommen muss um den roboter zu steuern ein wait verfahren eingerichtet damit er nicht andauernd dort hängen bleibt.



    achja was ich noch fragen wollt aku ryou ich versteh das nicht ganz

    GML-Quellcode

    1. x = spieler.x + abstand_zum_spieler;
    2. }
    3. else
    4. {
    5. x += x - spieler.x;


    was ist abstand zum spieler.....ist das ne variable die ich erstellen muss???wahrscheinlich oder...aber versteh die rechnung nicht ganz x = ja schon spieler x kannst du mir die 2 codezeilen noch näher erklären thx

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von acidrain833 ()