Speljohan's Forum Posts

  • 8 posts
  • Why don't you just store the distance between player and enemy in a private variable (of the enemy). Then you check the distance and if it's below a certain number of pixels and Player.Y is greater than Enemy.Y => enemy attacks. Just an example. Could be more specific about it if you posted the cap.

    I have a distance value to all my enemy sprites, since it's useful in many situations.

    Yes, it's a possible way, problem is i'm used to programming where i can just create a function/class and re-use it at a later time. If that was possible here it would be so much easier ^^

  • I kind of get the impression you want Construct to magically know which sprite you actually mean, no offense intended. But if you're using improper conditions your events won't do what you want them to.

    Maybe you could post the cap, so people could give you examples on how to fix it.

    I am aware of this, my question actually was if there was a way to get an instance of a sprite in the event editor, but apparently there isn't :/ Since the engine itself (obviously) knows how many instances of a sprite and their properties on the layout, the editor should have a way of picking these.

  • It's not messy if it's necessary.

    One thing i'd like to see is assigning scripts to certain sprites so you could reuse the same code for several objects. That would be sweet for these kind of things.

  • > Here is the events for it:

    >

    >

    > > +Player X is great or equal to Spike.Left
    >   -> spike: Set 'isGoingUp' to 1
    > +Value 'steps' Equal to 4
    >   -> spike: Set 'isGoingUp' to 0
    > +Value 'isGoingUp' Equal to 1
    >   -> spike: Set Y to .Y - (300 * TimeDelta)
    >   -> spike: Add 1 to 'steps'
    > [/code:1hm3z8bs]
    > 
    > Any help would be appreciated.
    > 
    
    Again, you have to define which spike you're talking about in the conditions.  This...
    
    [code:1hm3z8bs]
    +Player X is great or equal to Spike.Left
    [/code:1hm3z8bs]
    
    ...does not tell Construct which spike you're talking about.  Since Construct doesn't know which one to do, it's setting all your spikes' 'isGoingUp' to 1.  So by the time you get to the event that moves your spikes, they all move because they all have 1 in that variable.
    
    You need a more descriptive way to define which spike you want to move.
    

    Yes, i am aware of that, however i don't see a way of doing it without creating more events which results in a messy event editor :/

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • > Now onto my second question, is it possible make an action only apply to a specific instance of an object without having to create different copies for each object i have?

    >

    Yes. Define the specific instance in your conditions.

    For instance, if you have five enemies and you only want the one a bullet hits to be killed:

    > +bullet collides with enemy
      ->enemy: destroy
    [/code:24xj4a1s]
    
    This will only destroy the enemy that the bullet hits, because you defined the instance in the condition.  On the other hand:
    
    [code:24xj4a1s]
    +bullet collides with bomb
      ->enemy: destroy
    [/code:24xj4a1s]
    
    This will destroy [i]every[/i] enemy since Construct doesn't know which enemy you mean.
    
    You can add as many descriptive conditions to define which instance to pick.  Collisions, variables, expressions:
    
    [code:24xj4a1s]
    +enemy is overlapping trap
    +enemy.Value('armor') is equal to 0
    +enemy is visible
      ->enemy: destroy
    [/code:24xj4a1s]
    
    Out of all the enemies in the game, only the ones that meet [i]all[/i] those criteria will be destroyed.
    

    My event for a Spike (my "enemy") is set up so that when the player walks under the spike it will rise up and kill him, however when i use it, it makes both the spikes rise up when the second spike is walked above (they are next to eachother). I want them to operate separately from eachother.

    Here is the events for it:

    +Player X is great or equal to Spike.Left
      -> spike: Set 'isGoingUp' to 1
    +Value 'steps' Equal to 4
      -> spike: Set 'isGoingUp' to 0
    +Value 'isGoingUp' Equal to 1
      -> spike: Set Y to .Y - (300 * TimeDelta)
      -> spike: Add 1 to 'steps'
    [/code:24xj4a1s]
    
    Any help would be appreciated.
  • Wow, surprised i missed this. Thanks!

  • Well, i used to do this in MMF2 using the Path Movement system, however since this doesn't exist anymore i'm having trouble doing it. My first thought was a loop that increments the Y location, however it's moving way too fast for the human eye to see, and i don't seem to find any "Wait" or "Sleep" type of action (possibly because the objects aren't multithreaded?)

    I tried using TimeDelta as well, however this only functions properly when i put it in the Always condition, and i want this to be triggered whenever my character walks under it.

    How would i do this?

    EDIT, i solved it, if anyone else want help with this problem, pm me.

    Now onto my second question, is it possible make an action only apply to a specific instance of an object without having to create different copies for each object i have?

  • I would find it very useful to get the amount of objects currently on the layout with conditions.

  • 8 posts