Skocz do zawartości

Problem z Prądem?


Rekomendowane odpowiedzi

Witajcie! Wiem, że to banalny problem, ale ja nie wiem, jak go rozkminić.

Mam 2 obiekty: o_Prad i o_Amperomierz

I jak zrobić, żeby jak prąd miał kolizje z amperomierzem to zmienna ladunek w amperomierzu zwiększyła się o 1, a jak już prąd nie będzie w kolizji z amperomierzem to ladunek zmniejsza się o 1. Nie mam bladego pojęcia jak to zakodować.

Odnośnik do komentarza
Udostępnij na innych stronach

kazdy prod wstepujoc do ampermietra moze zapisac swe id w datowej strukrurze( polecam queue)

ampermierz tylko policzy wszystkie objekty wedlog ich id

 

mozna zatem zrobic inne wartosti produ dla roznych objektow ipt. :)

 

moze pokaze szybki przyklad

GML
Information about object: o_hrac

 

Sprite: sprite0

Solid: false

Visible: true

Depth: 0

Persistent: false

Parent: <no parent>

Mask: <same as sprite>

 

Create Event:

execute code:

 

_action=false;

 

 

Step Event:

execute code:

 

if (place_meeting(x,y, o_nepritel) && !_action) {

ds_queue_enqueue( o_nepritel._amperid, id);

_action=true;

};

 

if (!place_meeting(x,y, o_nepritel) ) {_action=false; };

 

 

 

Mouse Event for Left Button:

execute code:

 

x=mouse_x;

y=mouse_y;

 

______________________________________________________

 

Information about object: o_nepritel

 

Sprite: sprite1

Solid: false

Visible: true

Depth: 0

Persistent: false

Parent: <no parent>

Mask: <same as sprite>

 

Create Event:

execute code:

 

_amperid=ds_queue_create();

_amper=0;

 

 

Step Event:

execute code:

 

//

_amper=0;

for( iti=0; iti<ds_queue_size(_amperid); iti+=1){

_idn=ds_queue_dequeue(_amperid);

if(instance_exists(_idn)){

if place_meeting(x, y, _idn){

_amper+=1;

ds_queue_enqueue(_amperid, _idn);

};

};

};

 

 

Mouse Event for Glob Middle Released:

execute code:

 

instance_create(mouse_x, mouse_y, o_hrac);

 

 

Draw Event:

execute code:

 

draw_sprite_ext(sprite_index,-1,x,y,1,1,0,c_white,1);

draw_text(x,y-30, "amper="+string(_amper)+" ilosc _amperid v queue="+string(ds_queue_size(_amperid)) );

o_hrac= prod

o_nepritel= ampermetr

Odnośnik do komentarza
Udostępnij na innych stronach

proste rozwiozanie :) kazdy ampermetr ma swoj queue a id( od queue) jest w _amperid w objektu ampermetra

 

wystarczy przy kolizji produ z ampermetrem zapisac id produ do id wlasciwego ampermetra.

cos w tym stylu

GML
Information about object: o_hrac

 

Sprite: sprite0

Solid: false

Visible: true

Depth: 0

Persistent: false

Parent: <no parent>

Mask: <same as sprite>

 

Create Event:

execute code:

 

_action=false;

 

 

 

Step Event:

execute code:

 

_idamp=instance_place(x,y, o_nepritel);

 

//if (place_meeting(x,y, o_nepritel) && !_action) {

if (_idamp && !_action) {

 

//ds_queue_enqueue( o_nepritel._amperid, id);

ds_queue_enqueue( _idamp._amperid, id);

_action=true;

};

 

//if (!place_meeting(x,y, o_nepritel) ) {_action=false; };

if (!_idamp ) {_action=false; };

 

 

 

Mouse Event for Left Button:

execute code:

 

x=mouse_x;

y=mouse_y;

troche wypolerowalem kod od zbednych testow instance :thumbsup:

 

EDIT:

queue jest bardzo wydajne.

jesli bedzie duuuzo prod objektow, to niespowalnia bieg programu

u mnie dopiero przy 2000 instancjach zwolnil z 90fps na 59fps

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...