Objekte werden zu langsam aktiviert

  • Objekte werden zu langsam aktiviert

    Hallo allerseits,

    nach langer zeit hab ich mich nun dazu entschlossen mal wieder ein Spiel zu machen.
    Diesmal geht es um ein Shoot 'em up Spiel, in dem sich das Spiel selbst verbessert (Grafik wird besser, Extras wie neue Gegner, etc ...) je länger man es spielt.
    Aber das nur nebenbei. Nun hab ich ein Problem:

    Um Ressourcen zu schonen & Gegner erst dann schießen zu lassen, wenn man bei ihnen ist, hab ich den Code aus diesem Post genommen und passend für GM 7 umgeschrieben.

    Das ganze sieht jetzt bei mir so aus:

    GML-Quellcode

    1. view_xview[1] += 1;
    2. instance_deactivate_all(true);
    3. instance_activate_region(view_xview[1],view_yview[1],view_wview[1],view_hview[1],true);
    4. instance_activate_region(view_xview[0],view_yview[0],view_wview[0],view_hview[0],true);


    Mein Problem ist jetzt, das die Objekte irgendwie zu langsam aktiviert werden.
    Am einfachsten sieht man das an einem Beispiel:

    Aus diesesm Raum im Editor:


    wird das hier ingame (die roten Blöcke werden verzerrt):


    Was kann man dagegen tun?

    Mfg
    Supremus
  • Hast du einen älteren PC, der so viele Objekte nicht so schnell verarbeiten kann? Wenn ja liegts eventuell daran. Häng dann am besten eine .exe an, dann teste ich das kurz bei mir ;)

    Wenn du einen neueren PC hast dann weiß ich's ehrlich gesagt nicht. Vielleicht ist der Code zu viel für das Spiel bzw. den Game Maker... ?(
    (Aber unwahrscheinlich, wegen 4 Zeilen)


    MFG

    //Geistesblitz:
    Versuch mal, Origin ganz an den linken Rand zu verschieben. (Du weißt schon, bei den Sprites)
    Mir fällt grade auf:
    da kommt doch das Selbe bei raus wenn alle den (die das?) selben Sprite benutzen... 8|

    Still wating for Game Maker iPod Edition...
  • Hmm eigentlich net, ziemlich neuer Laptop ...
    Ich häng die exe mal an ... hmm zu groß dann halt so: file-upload.net/download-1818512/space.rar.html
    Mit Ziffern 1-6 kannste das Interface bisl verändern.

    Edit:
    Origin is eh schon bei 0,0
    Jo, aber der Teil, der normal aussieht is gleich beim start schon im View
  • selbes Problem... Ich denke das ist eine eine Art "Nebenwirkung" des Scripts...
    Ich danke mal das ist so, dass das Object sobald es im View ist sich nach links bewegt?
    Musste denke ich so lösen, dass sich Schiff und View durch einen sehr breiten Raum bewegen... Und der Rest bleicbt wo er ist... Oder ist das schon so?

    :D Kein Plan... Warte am besten auf die Experten ;)

    Oder mach mal Roomspeed höher und die Bewegungsgeschwindigkeit entsprechend langsamer (weiß zwar nicht wie ich da jetzt drauf komm und ob's tut, aber egal, Geistesblitze sollten nie ignoriert werden :vogel: ) Das könnte den Effekt zumindest verringern...

    Still wating for Game Maker iPod Edition...
  • Die Blöcke bewegen sich mit vspeed -2 nach links, durch einen 4000px breiten Raum, das Schiff mit vspeed 1 nach rechts, genau!
    Roomspeed höher (auf 60 statt 30) und

    GML-Quellcode

    1. view_xview[1] += 0.5;
    bringt folgendes interessantes, aber dennoch leider falsches ergebnis:
  • Und wenn du es umdrehst, also Room langsamer und alles andere schneller? Sorry bin grade zu doof zum denken...
    (Wenn Roomspeed größer --> Abstände größer, daraus folgt wenn Roomspeed kleiner --> Abstände kleiner)


    Ansonsten fällt mir nix mehr ein... Denkstau... (Sollte vllt mal was futtern...? Mach ich mal :D)

    Still wating for Game Maker iPod Edition...
  • Ist klar, da die Objekte nacheinander aktiviert werden. Wenn die erste Reihe nun weiter vorn ist, wird sie zuerst aktiviert und bewegt sich demnach auch früher. Heißt du müsstest den Aktivierradius vergrößern.

    © 2008 by Teamgrill Productions
  • Den Radius um 100 nach rechts zu erhöhen hilft teilweise dagegen. Es sind dann halt ein paar mehr Blöcke richtig aktiviert, aber ich hab dann das Problem dass meine Gegner auch 100 pixel bevor ich sie sehe zu schießen anfangen.
    Um alle Blöcke richig angezeigt zu bekommen müsste ich dann ca 300 pixel vorher alles aktivieren, und das kann ich wegen den gegnern nicht machen.

    Oder hat jemand vll eine idee, wie man die gegner trotzdem erst dann schießen lässt wenn sie in sicht sind? ich wollte das eigentlich über diese 3 zeilen code lösen lassen ...

    GML-Quellcode

    1. instance_deactivate_all(true);
    2. instance_activate_region(view_xview[1],view_yview[1],view_wview[1]+100,view_hview[1],true);
    3. instance_activate_region(view_xview[0],view_yview[0],view_wview[0],view_hview[0],true);
  • GML-Quellcode

    1. if (point_distance(x,0,player.x,0)<view_wview)
    2. // Dann Schusscode


    bzw

    GML-Quellcode

    1. if (x<view_xview+view_wview)
    2. // Dann Schusscode


    Würde das zweite nehmen.

    © 2008 by Teamgrill Productions
  • Okay, dann werde ich es so lösen.
    Eine Frage noch:

    GML-Quellcode

    1. statt instance_deactivate_all(true);

    würde ich gerne

    GML-Quellcode

    1. instance_deactivate_region(0,100,4000,400,true,true);
    verwenden, aber muss ich den 5. Parameter auf true/false setzten? Was bewirkt dieser Parameter?
  • Die Hilfe hilft :deal: :

    instance_deactivate_region(left,top,width,height,inside,notme) Deaktiviert alle Instanzen in der angegebenen Region (dessen Umrisse im Bereich liegen). Wenn inside false ist werden alle Instanzen ausserhalb der Region deaktiviert.Wenn notme true ist wird die ausführende Instanz nicht deaktiviert (Was normalerweise das ist was du willst.).