collision_line die 2te

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

  • collision_line die 2te

    hallo freunde


    also ich hab solche probleme mit der collision line bekomms einfach nicht reibungslos hin...also ich was das x1 und x2 die startkoordinaten sind und x2 und y2 die endkoordinaten...
    meine frage ist jetzt wenn ich jetzt ein box objekt erstelle und darin im step event eine collision_line abfrage mache ist x1 und y1 nicht ausgehend von der box??? ich hab es versucht mit den koordinaten 100,100,200,100
    und zur überprüfung im draw event noch eine draw_line mit den selben koordinaten eingefügt jedoch sieht man nichts....gebe ich die koordinaten x,y,200,y geht von der box ein ewig langer strich bis rauf zur raumkoordinate 200 x

    also ich will das der player die box schieben kann das wollte ich mit der collision line lösen es sollte von der box ein strich 300 pixel lang nach links und oder nach rechts stehn.
  • collision_line( x1, y1, x2, y2, obj, prec, notme );

    Im ersten Bild könnte die Funktion so aussehen: collision_line( 20, 20, 120, 20, obj, prec, notme );
    Im zweiten so: collision_line( x, y, x+100, y, obj, prec, notme );


    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
  • @Dufner

    danke echt toll erklärt diesmal check ichs..



    eins noch also ich hab jetzt eine box gemacht die man drücken kann....mit diesem code

    obj_player
    step event

    GML-Quellcode

    1. ​if collision_line(x,y,x+300,y,obj_box,false,false) && keyboard_check(global.key_left)&& keyboard_check(global.key_drucken){
    2. with obj_box
    3. x-=7;
    4. if keyboard_check(global.key_left) && keyboard_check(global.key_drucken){
    5. sprite_index=spr_player_drucken;
    6. image_speed=0.3;
    7. }
    8. }



    das drücken funktioniert auch das einzige was nicht funktioniert ist das er das sprite nicht wechselt
    was mach ich falsch???
  • @'Atomicmaster'


    obj_player

    create event

    GML-Quellcode

    1. drucken = 0;


    obj_player
    step event

    GML-Quellcode

    1. if (drucken == 1){
    2. sprite_index = spr_player_drucken;
    3. image_speed = 0.3;
    4. }
    5. if collision_line(x,y,x+300,y,obj_box,false,false) && keyboard_check(global.key_right)&& keyboard_check(global.key_shoot) && (drucken == 0){
    6. drucken = 1;
    7. with obj_box
    8. x+=7;
    9. } else {
    10. drucken = 0;
    11. }
    12. if collision_line(x,y,x-300,y,obj_box,false,false) && keyboard_check(global.key_right)&& keyboard_check(global.key_shoot) && (drucken == 0){
    13. drucken = 1;
    14. with obj_box
    15. x+=7;
    16. }else {
    17. drucken = 0;
    18. }
    19. if collision_line(x,y,x+300,y,obj_box,false,false) && keyboard_check(global.key_left)&& keyboard_check(global.key_shoot)&& (drucken == 0){
    20. drucken = 1;
    21. with obj_box
    22. x-=7;
    23. }else {
    24. drucken = 0;
    25. }
    26. if collision_line(x,y,x-300,y,obj_box,false,false) && keyboard_check(global.key_left) && keyboard_check(global.key_shoot)&& (drucken == 0){
    27. drucken = 1;
    28. with obj_box
    29. x-=7;
    30. }else {
    31. drucken = 0;
    32. }
    Alles anzeigen



    aber es geht nicht also das box bewegen geht schon nur das er das sprite ändert nicht.
  • habs jetzt ein wenig umgeändert damit der code übersichtlicher ist aber funktioniert trotzdem nicht das er die animation abspielt

    GML-Quellcode

    1. ​if (drucken == 1){
    2. sprite_index = spr_player_drucken;
    3. image_speed = 0.3;
    4. }else if (drucken == 0){
    5. sprite_index=spr_player_idle;
    6. }
    7. if keyboard_check(global.key_right)&& keyboard_check(global.key_shoot) && (drucken == 0) {
    8. if collision_line(x,y,x+300,y,obj_box,false,false){
    9. drucken = 1;
    10. with obj_box
    11. x+=7;
    12. }
    13. } else {
    14. drucken = 0;
    15. }
    16. if keyboard_check(global.key_right)&& keyboard_check(global.key_shoot) && (drucken == 0){
    17. if collision_line(x,y,x-300,y,obj_box,false,false){
    18. drucken = 1;
    19. with obj_box
    20. x+=7;
    21. }
    22. } else {
    23. drucken = 0;
    24. }
    25. if keyboard_check(global.key_left)&& keyboard_check(global.key_shoot)&& (drucken == 0){
    26. if collision_line(x,y,x+300,y,obj_box,false,false){
    27. drucken = 1;
    28. with obj_box
    29. x-=7;
    30. }
    31. } else {
    32. drucken = 0;
    33. }
    34. if keyboard_check(global.key_left) && keyboard_check(global.key_shoot)&& (drucken == 0){
    35. if collision_line(x,y,x-300,y,obj_box,false,false){
    36. drucken = 1;
    37. with obj_box
    38. x-=7;
    39. }
    40. } else {
    41. drucken = 0;
    42. }
    Alles anzeigen
  • Hmmm,

    das sieht da auch nicht ganz sauber aus, da du jedesmal ein else ran hängst wird dieses auch ausgeführt.
    Benutze lieber else if, damit du auch nur einen Codesniped ausführst und am ende dann das else, also in etwa so:

    GML-Quellcode

    1. if (drucken == 1)
    2. {
    3. sprite_index = spr_player_drucken;
    4. image_speed = 0.3;
    5. }
    6. else if (drucken == 0)
    7. {
    8. sprite_index=spr_player_idle;
    9. }
    10. if keyboard_check(global.key_right) && keyboard_check(global.key_shoot) && (drucken == 0) && collision_line(x,y,x+300,y,obj_box,false,false)
    11. {
    12. drucken = 1;
    13. with obj_box
    14. x+=7;
    15. }
    16. else if keyboard_check(global.key_right) && keyboard_check(global.key_shoot) && (drucken == 0) && collision_line(x,y,x-300,y,obj_box,false,false)
    17. {
    18. drucken = 1;
    19. with obj_box
    20. x+=7;
    21. }
    22. else if keyboard_check(global.key_left) && keyboard_check(global.key_shoot)&& (drucken == 0) && collision_line(x,y,x+300,y,obj_box,false,false)
    23. {
    24. drucken = 1;
    25. with obj_box
    26. x-=7;
    27. }
    28. else if keyboard_check(global.key_left) && keyboard_check(global.key_shoot) && (drucken == 0) && collision_line(x,y,x-300,y,obj_box,false,false)
    29. {
    30. drucken = 1;
    31. with obj_box
    32. x-=7;
    33. }
    34. else
    35. {
    36. drucken = 0;
    37. }
    Alles anzeigen
    Drei Arten von Männern versagen im Verstehen der Frauen:
    junge Männer, Männer mittleren Alters und alte Männer.

    irisches Sprichwort
  • habe es jetzt mal geordnet

    GML-Quellcode

    1. ​if (drucken == 1){
    2. sprite_index = spr_player_drucken;
    3. image_speed=0.2;
    4. } else if (drucken == 0) {
    5. sprite_index = spr_player_idle;
    6. }
    7. if keyboard_check(global.key_right)&& keyboard_check(global.key_push) && (drucken == 0) {
    8. if collision_line(x,y,x+300,y,obj_box,false,false){
    9. drucken = 1;
    10. with obj_box
    11. x+=7;
    12. }
    13. }
    14. else if keyboard_check(global.key_left)&& keyboard_check(global.key_push)&& (drucken == 0){
    15. if collision_line(x,y,x+300,y,obj_box,false,false){
    16. drucken = 1;
    17. with obj_box
    18. x-=7;
    19. }
    20. }
    21. else {
    22. drucken = 0;
    23. }
    24. if keyboard_check(global.key_right)&& keyboard_check(global.key_push) && (drucken == 0){
    25. if collision_line(x,y,x-300,y,obj_box,false,false){
    26. drucken = 1;
    27. with obj_box
    28. x+=7;
    29. }
    30. }
    31. else if keyboard_check(global.key_left) && keyboard_check(global.key_push)&& (drucken == 0){
    32. if collision_line(x,y,x-300,y,obj_box,false,false){
    33. drucken = 1;
    34. with obj_box
    35. x-=7;
    36. }
    37. } else {
    38. drucken = 0;
    39. }
    Alles anzeigen





    jedoch funktioniert das mit dem sprite immernoch nicht. aber ich hab probiert::: wenn ich bei if (drucken == 1) image_index = 6 eingebe und es dann im spiel probiere funktioniert es...also man sieht das sprite (das eine bild) die ganze zeit wenn man die kiste zieht....(aber auch nur auf einer seite(wenn man von rechts kommt))....was kann das sein.....
  • Für den Seitentausch kannst ja image_xscale banutzen, wenn dein origin in der mitte liegt.

    Und dir fehlt da immernoch ein else if...
    Zeile 23 oder 41 wird immer ausgeführt, das heißt Drucken = 0. Das willst du ja nicht. 8)
    Lösche 23 bis 26 und mache bei 27 ein else if daraus.

    Gruß Bartl
    Drei Arten von Männern versagen im Verstehen der Frauen:
    junge Männer, Männer mittleren Alters und alte Männer.

    irisches Sprichwort
  • Willst du das wir dir helfen besser zu coden und die Probleme zu verstehen oder willst du von uns Lösungen... :pinch:

    In deinem Code wird nirgends die Richtung geändert, zumindest nicht so das man es erkennt.
    Ich zeige dir noch einmal, wie ich dein Beispiel anpassen würde. Den Rest kann man nur raten.

    GML-Quellcode

    1. if drucken == true
    2. {
    3. sprite_index = spr_player_drucken;
    4. image_speed = 0.2;
    5. if von_rechts == true
    6. {
    7. image_xscale = 1; //kann auch umgekehrt sein, kenne dein sprite nicht
    8. }
    9. else
    10. {
    11. image_xscale = -1;
    12. }
    13. }
    14. else
    15. {
    16. sprite_index = spr_player_idle;
    17. }
    18. if keyboard_check(global.key_push) && drucken == false //Wieso du drucken hier abfrägst, ist mir schleierhaft. Ich würde das weg lassen
    19. {
    20. if keyboard_check(global.key_right) && (collision_line(x,y,x+300,y,obj_box,false,false) || collision_line(x,y,x-300,y,obj_box,false,false))
    21. {
    22. drucken = true;
    23. von_rechts = true;
    24. with obj_box
    25. {
    26. x +=7;
    27. }
    28. }
    29. else if keyboard_check(global.key_left) && (collision_line(x,y,x+300,y,obj_box,false,false) || collision_line(x,y,x-300,y,obj_box,false,false))
    30. {
    31. drucken = true;
    32. von_rechts = false;
    33. with obj_box
    34. {
    35. x -=7;
    36. }
    37. }
    38. else
    39. {
    40. drucken = false;
    41. }
    42. }
    Alles anzeigen


    Das mit dem Einrücken des Codes wird leider schlecht dargestellt, daher siehts etwas wild aus ;(
    Drei Arten von Männern versagen im Verstehen der Frauen:
    junge Männer, Männer mittleren Alters und alte Männer.

    irisches Sprichwort

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

  • das problem ist das er die animation des sprites nur abspielt wenn man mit dem ziehen aufhört...aber natürlich sollte die animation wärendessen abgespielt werden.
    und dazu gleich noch ein problem....meine animation beginnt damit das der player seine hände hebt.wie kann ich es machen das wenn ich das ziehen aktiviere nur einmal kurz die animation abspielt und dann
    nur mehr die letzten 3 bilder abgespielt werden solange bis man aufhört die knöpfe zu drücken... damit der player mit gehobenen händen die box zieht.


    @Bartlbey
    ich bin dir wirklich sehr dankbar das du mir hilfst aber wenn es dir am arsch geht dann tu es bitte nicht.es tut mir leid das ich nicht so schnell oder gut bin wie all die anderen hier.
  • Hallo Allerseits

    Ich hab jetzt nicht alles ganz mitbekommen was los ist, aber ich habe da mal ein paar Inputs für dich acidrain833 welche Dir evtl. helfen könnte.
    1. Nochmals genaue Erklärung über collsions_line:
    2. Tutorial zum Kisten herum schieben:
    3. Du kannst mit image_index die Frames in deinen Sprites abfangen, dann zum Beispiel stoppen und wieder weiter abspielen lassen. Kleines Tut:


      PS: Den ganzen Code mit dem Sprite auf Recht-Links ausrichten kannst du löschen und so einfach verkürzen:

      GML-Quellcode

      1. image_xscale = (key_right-key_left);
      ;)
    huhu
  • das problem besteht trotzdem noch also ich hab jetzt die anordnung benutzt



    GML-Quellcode

    1. ​if drucken == 1{
    2. sprite_index=spr_player_drucken;
    3. image_speed=0.3;
    4. }
    5. if keyboard_check(global.key_push) && keyboard_check(global.key_right) {
    6. if collision_line(x,y,x+300,y,obj_box,false,false) or collision_line(x,y,x-300,y,obj_box,false,false){
    7. drucken = 1;
    8. with obj_box{
    9. x+=7;
    10. }
    11. }
    12. }
    Alles anzeigen


    ich weiß das dort das else drucken = 0 fehlt doch wenn ich das hinzufüge gehen andere codes nicht mehr......jetzt zb ist es so das das schieben geht ...das problem ist nur das er die animation fürs schieben erst nach dem loslassen der tasten ausführt..(also das was bei drucken == 1 steht)...

    ich verzweifle...ich kann auch mein ganzes step event posten wenn das dann leichter ist...
  • Ich überlese mal deinen Post :D , da ich weiß wie sehr man manchmal aus der Haut fahren kann wenn man nicht weiterkommt (würde es mir am a... vorbei gehen, würde ich ja nix Posten).
    Man beginnt nur meist einfach mit einem zu großen Projekt, dafür bewundere ich dein Durchhaltevermögen :thumbsup:

    Nun aber zu deinem Problem:

    Liegt es vielleicht daran, dass du mit x+7 schon deine ganze Bewegung vollziehst?
    Das würde bedeuten in einem Step die Kiste 7 Pixel nach rechts und anschließend beginnt die Animation.

    Wenn ich richtig liege, Versuche mal:

    GML-Quellcode

    1. if drucken == 1{
    2. sprite_index=spr_player_drucken;
    3. image_speed=0.3;
    4. for (i = 1; i>7; i++){
    5. with obj_box{
    6. x+=1;
    7. }
    8. }
    9. if i > 7{
    10. drucken = 0;
    11. }
    12. }
    13. if keyboard_check(global.key_push) && keyboard_check(global.key_right) {
    14. if collision_line(x,y,x+300,y,obj_box,false,false) or collision_line(x,y,x-300,y,obj_box,false,false){
    15. drucken = 1;
    16. }
    17. }
    Alles anzeigen

    Drei Arten von Männern versagen im Verstehen der Frauen:
    junge Männer, Männer mittleren Alters und alte Männer.

    irisches Sprichwort

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bartlbey ()