dop2000's Forum Posts

  • Please refresh the post, I edited it while you were reading :)

  • [wrong answer deleted]

    Since you are already using SpritFont+, you need to modify width for some characters in the JSON string.

    For example:

    {""c2array"":true,""size"":[2,8,1],""data"":[[[10],[11],[12],[19],[21],[22],[23],[34]],[["" ""],[""l""],[""i""],[""j""],[""f""],[""abcegh""],[""dk""],[""m""]]]}

    First group [[10],[11],[12],[19],[21],[22],[23],[34]] are character width values.

    The second group are corresponding characters. So, for example, to make letter "i" wider, you need to increase the number [12], or move letter "i" to another group (add it to ""f"" for example).

  • relixes I don't think what you suggested will work. Object, FamilyA and FamilyB are picked independently, if you pick one Object instance, FamilyA.pickedCount and FamilyB.pickedCount will still return the total number of instances.

    jwilkins I think the only way is to add an instance variable "isMount" to FamilyPlayer. Set it to true for all objects which are members of Mount family.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • Try the new Timeline feature, it's perfect for such things:

    construct.net/en/forum/construct-3/general-discussion-7/introduction-timelines-141935

  • mrmlabs On start of layout if global variable selected_player=1, create sprite player_1, otherwise create sprite player_2. Or you can use "Create by name" action, and create object "Player_"&selected_player

    I also suggest moving the instance variable selected_player to family level (see the link I posted above on how to do this). This will allow you to use this variable in events with the family object. For example, you might have something like this:

    On bullet collision with PlayersFamily: 
    	PlayersFamily.selected_player=1 -> Spawn green particles
    	PlayersFamily.selected_player=2 -> Spawn blue particles
    
    
  • Wow, 37 events to rotate one sprite! :)

    You can remove the slider bar and do this with just one event:

    Mouse left button is down: Sprite set frame to ((mouse.X+180)%180)/5
    

    Also, set animation speed to 0 in the sprite editor.

  • This is not a bug. Your game is crashing because you created an infinite loop, probably recursively calling the same function.

    Here is a simple demo I made with Tile Movement, maybe it will help you:

    dropbox.com/s/tvzassvj4pgxe5k/TileMovement_RandomRunner.c3p

  • Your events seem ok to me, it's difficult to say why they don't work.

    I suggest you output Array.AsJSON and i_TargetDirection into Browser Log in all these events, to see what exactly is happening with the array and the variable.

    I understand, this character is moving on a grid? Why don't you use Tile Movement behavior? This may be easier.

    • Post link icon

    Ok, so in this case I would use two tags - "MenuMusic" and "LevelMusic". Level music are random tracks, but played with the same tag.

    On start of menu layout, stop tag "LevelMusic" and start "MenuMusic".

    On start of any level, stop tag "MenuMusic", and start "LevelMusic". (only if this tag is not playing already)

    • Post link icon

    It don't think there is any difference between C2 to C3 here, and the runtime should also not matter.

    I don't understand - you want to play Music1/Music2/Music3/Music4 in levels, and when switching to Menu you want to stop level music and play MusicMenu? When switching to level, you want to stop menu music? Or when any music is already playing, you don't want to interrupt it?

    • Post link icon

    Use tags! Check if tag "music" is not already playing, only then start playing music with tag "music".

  • It's hard to help you without seeing your project. You can apply force to wheels when the plane is upside down, I guess, but it will also drag the plane up. Or use two joints (to form a triangle) to make rigid connection.

  • You do not have permission to view this post

  • To pick a random value from the array, use this expression:

    Array.At(int(random(Array.width)))

  • When you use "Enemy has LOS to player" condition, this picks all enemy instances that have LOS. For example, if you have 10 enemies, this event can pick 2 of them. Everything you do inside this event, will only apply to those 2 picked instances. So you can tell them to chase the player, using Pathfinding behavior for example.

    You can add another (inverted) event "Enemy does NOT have LOS to player", this event will pick the remaining 8 enemy instances. You can stop their movement, or something like that.

    It's a good idea to define an instance variable on the enemy, for example, State. For chasing enemies set State="chasing", for other set State="patrolling", this will give you more control and allow you to distinguish them in other events. So your code can be something like this:

    Enemy has LOS to player
    Enemy State="patrolling"
    	Enemy set State="chasing"
    	Enemy find path to player
    
    Enemy on path found 
    	Enemy move alone path
    
    Enemy does NOT have LOS to player
    Enemy State="chasing"
    	Enemy set State="patrolling"
    	Enemy Pathfinding Stop