DiegoM's Forum Posts

  • That feature does not exist.

    Do you mean something like the audio tracks, but for video instead?

  • Please file an issue in our tracker, following the guidelines.

    github.com/Scirra/Construct-3-bugs/issues

    In this case the most important thing would be attaching an example project demonstrating the problem. I tried doing what you described myself in a new project, and it looks like it works as expected, so I am thinking there is something particular about your project which is not obvious.

    If you can't reproduce the problem in a minimal project and don't mind sharing your project, including it in your issue is the next best thing.

    If for some reason you can't share it on our public tracker, then you can send your project to me at diegodtt@construct.net and I will take a look.

  • Sounds like something C3 could handle no problem.

    A 50 x 50 pixels image at 32 bit depth should be around 10 Kilobytes (just tried it by creating one in Windows), which isn't a lot. 500 images of 10 kilobytes would be 5000 kilobytes, which is 5 megabytes, which is still a very small amount of memory.

    The total amount of memory taken shouldn't be a problem at all, as for the rendering...

    If you create an animation with 500 different frames, C3 ends up packing everything together into as few textures as possible.

    Just tried out doing that in the editor to see what would be generated, I created an animation with 500 frames, then right clicked on the project folder in the Project bar and selected Tool > View sprite sheets. C3 ends up creating 8 textures of 2048 x 2048 which will take up 32 megabytes in RAM, which isn't a lot.

    Since all the instances will be of the same object type, it means they will all use the same textures for rendering, so no memory overhead there. All the instances will use the same 32 megabytes of loaded image memory.

    Finally, 75 instances will not be a problem at all.

  • In the next beta cycle, a globe icon similar to this 🌍︎ will be used to denote global layers and overridden ones, instead of text.

    There will also be a new context menu option added in the Layers Bar to open the layout which holds an original global layer by right clicking on an overridden one.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • Make sure you have given C3 permission to use the system clipboard

    support.google.com/chrome/answer/114662

    Under construct.net look for editor.construct.net and in there for the value of Clipboard

  • pikawilliam11

    I too thought that this might be related to Opera GX, so I tried it out... and didn't see any crash. So it might be something very specific to your setup.

    Also, when you take into account that Opera GX is built on Chromium, the open source project which also powers Chrome... it's even less likely that there could be a bug that happens in Opera GX but not in Chrome, because they are essentially the same browser with a different coat of paint.

    None of this is particularly helpful, but I thought to point it out.

  • I have heard from people that the ability to play audio from a timeline is reasonably in sync, but I don't know exactly how the feature is being used.

    Truth is that relying on the timeline play head and the audio that is playing to be in sync is not adviced, if you are looking for high accuracy that is. This is because the timeline basically just acts as a trigger to start playing a sound, after that the audio and the timeline continue doing their own thing separately and parity is not guaranteed.

    The audio tracks serve more as a visual aid to better control when audio will be triggered and as a general guidance on to how long the audio will be playing for, relative to the total timeline time.

    Having said that, you can run your own small tests with the feature and see if it will work for you.

  • The start page received a significant overhaul at the start of 2022.

    All of the example projects can now be found in the example browser which you can find by either clicking on the Browse Examples button in the Start page or through the main menu Menu -> View -> Example Browser

  • This isn't possible, you can however, define your properties in the constructor and initialize them to default values and then define an initialization method that receives your custom data.

    Something like this:

    	class Projectile extends ISpriteInstance {
    		constructor()
    		{
    			super();
    
    			this._foobar = null;
    		}
    
    		Initialize(foobar)
    		{
    			this._foobar = foobar;
    		}
    	}
    

    Then you can do this

    	let projectile = runtime.objects.projectile.createInstance("main",playerObj.x,playerObj.y, true)
    
    	projectile.Initialize(/*your custom data goes here*/);
    
  • Ah ok, I was asking because that fix wasn't specifically related to your issue, so the problem you were having might still persist.

  • Have you tried it out to see if it solved your problem?

  • dop2000

    If I recall correctly I didn't do it the first time around just to get something out.

    In the mean time, it is now possible to copy and paste animations between object types. You can copy them using the context menu options of the animations panel or keyboard shortcuts (make sure focus is on the animations panel by clicking on it), close the Animations editor, open it again for a different object type and paste in the animations panel.

    You can copy individual animations or sub folders.

  • Not really sure exactly how you plan to save and load all the data, but as far as creating inheritances in Javascript, just go with classes.

    Prototype inheritance (and everything surrounding it) is legacy at this point. Classes will do the same (and a few extra things) and are much easier on the eye.

    One thing to note is that, even though prototypes are legacy, they are fully supported, so you can use them if the opportunity arises. If you are still figuring things out though, just go with classes they will likely cover 99% of the cases.

    Depending on your needs you might be able to get away with something easier though.

    If your data objects don't have nested properties (properties which are objects or arrays with more data in them), you can rather easily use Object.assing to create a new object with the properties from a list objects.

    Object.assign(
    // the new empty object were all the properties will be applied
    {}, 
    // The first source object to copy properties from
    {
    	x: 0,
    	y: 1,
    	name: "foo"
    },
    // The second source object to copy properties from
    {
    	name: "bar"
    	damage: 5
    }
    // As many source objects as needed can be added
    );
    

    Something like that, will create a new object that looks like this:

    {
    	x: 0,
    	y: 1,
    	name: "bar",
    	damage: 5
    }
    

    The properties of the first source object are copied into the target (first empty object), then the properties of the second source objects are applied onto it, any existing properties are overwritten and new ones are added.

    Using this approach you can allow the player to select a base item, then a specific one, merge them and the result becomes the new item.

  • Been meaning to respond to this, but just could not write a comprehensive answer.

    The short answer is that there is no built in method to do this with the JSON plugin.

    Any solutions would need to be through Javascript scripting and even then it wouldn't be trivial. Definitely possible, but not obvious.

    What you are describing is basically this

    stackoverflow.com/questions/27936772/how-to-deep-merge-instead-of-shallow-merge

    I think it would be much easier to have a file with the common properties for items, that everything will use, and also properties which refer to specific "classes" of items. Something like this:

    {
    	item: {
    		common: {
    			"a": "common-prop-1",
    			"b": "common-prop-2",
    			"c": "common-prop-3"
    		},
    		classes: {
    			"axe": {
    				"a": "axe-prop-1",
    				"b": "axe-prop-2",
    				"c": "axe-prop-3"
    			},
    			"sword": {
    				"a": "sword-prop-1",
    				"b": "sword-prop-2",
    				"c": "sword-prop-3"
    			},
    			"bow": {
    				"a": "bow-prop-1",
    				"b": "bow-prop-2",
    				"c": "bow-prop-3"
    			}
    		}
    	}
    }
    

    Then have another file with the specific items, which have their own unique properties and an ID to the common properties for the class of item. Something like this.

    {
    	items: {
    		"hand-axe": {
    			"a": "hand-axe-prop-1",
    			"b": "hand-axe-prop-2",
    			"class": "axe"
    		},
    
    		"great-axe": {
    			"a": "great-axe-prop-1",
    			"b": "great-axe-prop-2",
    			"class": "axe"
    		},
    
    		"excellent-axe": {
    			"a": "excellent-axe-prop-1",
    			"b": "excellent-axe-prop-2",
    			"class": "axe"
    		}
    	}
    }
    

    So when you want to look up information for an item, first you look up in the specific file, then you look at what is the "class" of the item, and use that to do another look up in the first file. The common properties don't need a specific lookup, you could just get them because you known before hand every item will have them.

    This could also be arranged in a single file, this was just an example.