dop2000's Forum Posts

  • As far as I know it's not possible to access other members in the container if you refer to them via family.

    Consider combining all these sprites into one. So instead of 12 separate Body sprites use one sprite with 12 animations. They will be much easier to work with and you will be able to use containers.

    With separate objects like you have now, it's almost pointless to combine them into containers. If you need to have separate objects, then I would suggest grouping them using hierarchy (scene graph). Hierarchy is compatible with families, so you will be able to do things like "For Each ArrowbodyFamily Pick Child ArrowheadFamily"

  • Not sure I understand the question. Do you have multiple instances of the same objects, grouped in containers? Then you can simply use "For each" loop for one object in the container, and instances of other objects will be picked automatically.

    For example, if you have a container with Car+FrontWheel+RearWheel sprites, you can do "For each Car -> FrontWheel Pin to Car, RearWheel Pin to Car".

  • ACCES-Mathieu You can always load older versions of the editor if you need to open projects with C2 runtime, since this runtime haven't been updated in a long time.

    For example:

    https://editor.construct.net/r234-4

    You might need to edit version number in your project, see this tutorial.

  • My strategy is doing nothing. You can't force people to watch ads, they'll stop playing your game. "Free" players are still better than no players.

  • Magistross Thanks for the info!

    I posted this idea on the suggestions platform a few months ago, but it will never get enough votes to be considered by Scirra..

  • I usually use some character, for example ^. And then replace this character with newline expression.

    For example, you may have this text in the dictionary:

    Hello there,^general Kenobi!

    When you're showing it on the screen, you can do this:

    Text set text to replace(Dictionary.Get("greeting"), "^", newline)

    .

    And of course you can optimize the code by creating a function, which will return formatted text from the dictionary for any key.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • No, I meant you only need to load one file. If device language is English, load English file, if Russian - load Russian. Use the same AJAX tag. So as a result, the dictionary will contain strings only for one language.

  • Check out this template:

    editor.construct.net

    I've also seen a few tutorials, you can try googling.

    I think the easiest way would be using a dictionary. Prepare a separate dictionary file for each language in the project, for example "Strings-EN.json", "Strings-FR.json"

    On startup when you detect device language, request the required file with AJAX and load it into the Lang dictionary. In this dictionary you can use codes as keys and translations as values. For example, the key can be "GameOverText" and the value in the French file can be "Jeu terminé!"

    And then you set text for your text object to Lang.Get("GameOverText")

  • I don't understand your setup. Are level buttons instances of one sprite? Or are they different sprites?

    The easiest way is to make one sprite object LevelButton, and add "Level" instance variable to it. Manually set level numbers to all buttons in the layout editor. Then you can use "LevelButton compare variable" to reference them.

    For example:

    LevelButton compare variable Level>(CurrentLevel+1)
    	LevelButton set invisible
    
  • Why are you picking Family1, and not Spawner sprite directly?

    You can also use "System Pick All Family1" condition in a sub-event.

    Bullet on collision with Family1
    
    	Pick All Family1
    	Family pick with UID Bullet.SpawnerUID
    
    
  • When you use & operator with integer values, it works as boolean "AND" operator. You need to tell Construct that you are concatenating string values.

    You can try this:

    Set result to ""&val1&val2&val3 etc.

    Or convert them to strings:

    Set result to str(val1)&str(val2)&str(val3)

  • Another option is to remove all references to this plugin, it's possible that ads will work without it.

    So you can try changing the script like this:

    function onDeviceReady() {
    
     console.log('Initializing API');
     document.getElementById('deviceready').classList.add('ready');
    
     const rivendell = window.rivendell
     console.log('banner align: ' + rivendell.BANNER_ALIGN.BANNER_HORIZONTAL_CENTER)
    
     rivendell.setBannerCallback(callback => {
     console.log("setBannerCallback event: " + JSON.stringify(callback.event))
     console.log("setBannerCallback error: " + JSON.stringify(callback.error))
     })
    
     rivendell.setInterstitialAdCallback(callback => {
     console.log("setInterstitialAdCallback event: " + JSON.stringify(callback.event))
     console.log("setInterstitialAdCallback error: " + JSON.stringify(callback.error))
     })
    
     rivendell.setRewardedAdCallback(callback => {
     console.log("setRewardedAdCallback event: " + JSON.stringify(callback.event))
     console.log("setRewardedAdCallback error: " + JSON.stringify(callback.error))
     })
    
     let appKey= "PUT ANDROID APP ID HERE";
     
     console.log("appKey: " + appKey)
     if(appKey == null)
     return
    
     rivendell.init(appKey, callback => {
     console.log("rivendell init: " + JSON.stringify(callback))
     switch (callback.event) {
     case rivendell.Event.ON_INIT_SUCCESS:
     console.log("init SUCCESS")
     break
     case rivendell.Event.ON_INIT_FAILED:
     console.log("init FAIL")
     break
     }
     })
    }
    
    function isBannerLoaded() {
     window.rivendell.isBannerAdLoaded(callback => {
     alert("Banner loaded: " + JSON.stringify(callback))
     })
    }
    
    function showBanner() {
     window.rivendell.showBannerAd()
    }
    
    function isInterstitialAdLoaded() {
     window.rivendell.isInterstitialAdLoaded(callback => {
     alert("Interstitial loaded: " + JSON.stringify(callback))
     })
    }
    
    function showInterstitialAd() {
     window.rivendell.showInterstitialAd()
    }
    
    function isRewardedAdLoaded() {
     window.rivendell.isRewardedAdLoaded(callback => {
     alert("RewardedAd loaded: " + JSON.stringify(callback))
     })
    }
    
    function showRewardedAd() {
     window.rivendell.showRewardedAd()
    }
    
  • The error in the log indicates that the method is called, so it's fine.

    To build with C3 you need to export your project for Cordova, then unzip the exported game and edit two files - config.json and config.xml

    See how other cordova plugins are configured there and add "cordova-plugin-device" the same way, preserving the correct formatting!

    After that add all files back to ZIP, open Export Manager in C3, load your updated zip there and click "Build application" icon.

    This will only work if cordova-plugin-device plugin is whitelisted in C3, I am not sure if it is.

  • You can just insert the content of this file into a text variable and then execute it with "Browser Execute JS"

    Or add this file to the project, request it with AJAX and then execute.