Control mirror settings for multiple instances

Get help using Construct 2

Post » Mon Feb 11, 2013 2:06 am

I'm having trouble with 3 enemies that overlap each other, whenever that happens, each enemy sprite gets mirrored/not mirrored.

I have the code working fine when the enemy are not overlapping each other. If you guys can check the capx, its on Line 7.

EDIT: My code is based on the enemy collision box to support multiple sprites with Platform Movement to simulate AI, not Custom movement. That is why i cannot delete the Enemy Collision Box.

https://dl.dropbox.com/u/101797089/enemies.capxIplaygames2013-02-11 22:49:46
B
10
S
4
G
3
Posts: 46
Reputation: 3,036

Post » Mon Feb 11, 2013 5:32 am

Before giving you the answer~
I would like to explain some basic structure of real coding~
I think this will help you on C2 too~

You have an event as below:
If enemy is overlapping solid && For each enemy && Enemy direction = 1~

"For Each" doesn't work within "&&" or "||" block in real code~
You must declare "For Each" first before doing any actions~

For example:
For each enemy~
----If enemy is overlapping solid~ Do something~

Same "For each" doesn't need to declare twice~
You have a code as below on line 7:
For each enemy collision box~
----If job1 is overlapping enemy collision box~
-&&-For each enemy collision box~ <-- Declared twice
-&&-For each job1~

From event above, you declared "For each" within "&&" statement~
In real code it will return compile error~

In additional~
Remember to pay attention on timing of events~
Does the trigger run 1 frame or every frames~
Sub events are important~
You must put your events into correct sub-places~
In order to execute correctly~
That's it. Hope you learn something on this~ ^_^

I cleaned up your file and this is maybe what you want:
> Deleted another wall, only yellow wall left~
> Deleted the "enemy collision box"~
> Adjusted job1's collision into "enemy collision box" shape~

Instance variable for yellow wall:
var wallSide = <varies>;   // Detect if it is left or right wall.

> Duplicate the wall, name the variable into "left" or "right"~

Instance variable for job1:
var moveSpeed = 200;       // Job1 moving speed.

Behavior for job1:
> Custom Movement~

On start of layout:
Set job1 custom movement (Horizontal) speed to job1.moveSpeed~

For each job1:
----If (job1 is overlapping wall)~
--------If (wall.wallSide = "left")----{Set job1 to not mirrored;
----------------------------------------Set job1 custom movement (Horizontal) speed to job1.moveSpeed;}
--------If (wall.wallSide = "right")----{Set job1 to mirrored;
----------------------------------------Set job1 custom movement (Horizontal) speed to -job1.moveSpeed;}

Another suggestion:
I have a habit to store some values / strings into variables~
Instead of typing it directly into events~
Because it's easy for tweaking in the future when you have a bunch of codes~

That's it. Hope it helps. Good luck~ ^_^
B
13
S
5
G
3
Posts: 63
Reputation: 3,989

Post » Mon Feb 11, 2013 3:55 pm

Thanks for the reply AkiraWong!

You gave me a lot of good helpful tips that i will definitely use.

My code is based on the enemy collision box to support multiple sprites with Platform Movement to simulate AI, not Custom movement. That is why i cannot delete the Enemy Collision Box.

If you can provide a capx for the changes you have made, that would be very helpful.

Thanks a lot!
B
10
S
4
G
3
Posts: 46
Reputation: 3,036


Return to How do I....?

Who is online

Users browsing this forum: WhosWho and 19 guests