How do I choose which image frame to use as the 3D face in the properties?

0 favourites
  • 14 posts
From the Asset Store
Selection frame like in RTS games, works both on mobile and desktop devices.
  • C3/3D/Mobile Game

    My game is getting way too large. I have a ton of sprites to use on the faces of the 3D images and they all need to be each layout or they don't show up - that's way too much on each layout.

    On the left, in Properties, I select which Faces are visible and below that I choose which image I want to use. Where do I select which frame (or animation) I want to use from that image?

    Is there an option for that? What am I not seeing?

    Right now, I have far too many images on the side of the screen that I'm using for those 3D objects. I need to be able to click on that object, select the faces I want show, select the image for those faces and then the animation for each image.

    Thoughts?

    Tagged:

  • Add the sprite used for one of its faces to the layout and change its initial frame, and it should update all the 3D shapes.

    If you want an individual setting for each 3D shape, put the sprite used for one of its faces in a container with the 3D shape. Any time you change the Sprite's frame it will update the 3D shape too.

  • Ashley,

    Thank you for your reply. I have a question. This: "If you want an individual setting for each 3D shape, put the sprite used for one of its faces in a container with the 3D shape. Any time you change the Sprite's frame it will update the 3D shape too."

    Does that update all the copies of the 3D object or only 1 copy of the 3D object?

    If it only updates that 1 copy of the 3D object, how do I set the frame so it only changes on that copy?

    Updating all copies of the 3D object is what I'm trying to avoid.

    Example: I have a 3D object called 3D_house (with an instance of houseNumber). I copy 3D_house so it appears 30 different places on the layout (and needs 2 of 12 frames).

    I have an image called 2D_house with 12 frames.

    Each copy of 3D_house needs a different frame from the image 2D_house.

    I thought I could either:

    1. click on 3D_house, set the image faces as Top Face = 2D_house > frame 2, Bottom Face = 2D_house > frame 3. Then click on the next house and set the image faces as Top Face = 2D_house > frame 4, Bottom Face = 2D_house > frame 5 and so on for all 30 copies of the 3D_house. That didn't work

    or 2. in the code, use the instance and set it so if houseNumber = 0, set Top Face = 2D_house > frame 2, Bottom Face = 2D_house > frame 3. Then set houseNumber = 1 set Top Face = 2D_house > frame 4, Bottom Face = 2D_house > frame 5.

    Neither of those work.

    I've gotten it to work if I use markers and the marker creates the 3D objects, but that ends up creating a 2D image for every 3D object. If I'm going to create a 2D image for every 3D object I may as well have all the 2D images on the layout. Which is what I have now and it's a lot.

    Image below is what I have now and it's a lot. I want to condense that.

  • So long as there's the same number of sprite and 3D shape instances, the engine pairs them up and applies each Sprite's properties to each 3D shape's face. Try it in a empty project and you'll see how it works: dropbox.com/s/3o3tr1i7f1d7601/sprite-3d-faces.c3p

  • Ashley

    Ok, close. That's what I'm trying to avoid.

    How do I remove the "Sprite" that is set to frame 1, so we see the number 2, from above the layout and still have 2 on the second copy of the 3D object?

    That's what I'm trying to create.

    If I'm going to need 12 copies of the same image on the layout with different frames selected, isn't that the same as putting the 12 different images above the screen?

    I'm trying to create 1 image with 12 frames to be used for all 30 copies of the 3D_house (1 image for each copy).

    I may not be explaining it correctly.

    Using your example, I want to do this:

  • PS I've done it before, but I had to use markers and some crazy coding. Also, it created an image for every 3D object, which is what I'm trying to avoid.

    I really want to remove the markers and have it do the same thing without creating all the extra copies of the image, and do it on the start of the layout.

  • Currently you have to have one Sprite instance per 3D shape instance for it to work. Otherwise there's no way to specify what frame you want - 3D shape doesn't store any sprite properties (or tiled background properties) itself, so you need another instance to take the properties from.

  • Ashley

    Got it. Thank you for the information.

    And thank you for taking the time with me, I can be a bit thick.

    Also, you said "Currently" any possibility .... in the future .... there may be an option in properties where we can set the face and then set the frame?

    I imagine it like the image below (but with all the object faces listed lol)

    Thanks again.

  • You'd need to repeat all the properties for all possible objects that can be set as faces (e.g. sprite animations, Tiled Background offsets, etc.), including all the conditions/actions/expressions to access them, all of which duplicates all the existing features in the other objects. Which is why it's designed to just take them from a corresponding instance.

  • You'd need to repeat all the properties for all possible objects that can be set as faces (e.g. sprite animations, Tiled Background offsets, etc.), including all the conditions/actions/expressions to access them, all of which duplicates all the existing features in the other objects. Which is why it's designed to just take them from a corresponding instance.

    Ashley

    Not to necro too old of a thread, but I found this post while running into a similar issue where I'm creating Sprite objects during gameplay that I want to use with more than one 3D Shape object, and the way it currently behaves is somewhat inconsistent with how picking/referencing other objects works in other areas of Construct.

    TL;DR version:

    Being able to manually pick the specific Sprite object to supply the images shown on multiple instances of 3D Shape's object faces would be useful and potentially help performance when there's otherwise lots (potentially thousands) of instances of the same Sprite object floating around that don't really need to be there if this capability existed.

    Details:

    If I'm creating the Sprite in a more top-level event before creating the 3D Shape - which generally means that's the most recent picked object Construct should know I'm referring to, and C3 does appear to keep track of the most recently-spawned Sprite throughout the process I'm describing - when I assign a Sprite object to the faces of the 3D Shape, it's picking a random Sprite instance if I create more than one 3D Shape object after creating the Sprite object.

    This is consistent with how you're describing the intended behavior Ashley but if multiple objects are using the same image (and always will) it seems like if I either create a sprite during a higher level event or pick a sprite by IID/UID, then that should be the object that's used as a reference for the 3D Shape. Otherwise there's a lot of unused objects floating around the layout and I have noticed some (however small) performance impact when doing it this way, and that impact can add up.

    As an example, here's a procedurally generated layout where if the walls are only a single 3D Shape object on each "tile," Sprite/3D Shape pairs are correctly assigned:

    If there are multiple 3D Shape objects created at each "tile" to create higher walls (no, scaling the z Height of a single 3D Shape object isn't an option for other reasons) then the wrong Sprite objects are picked and the results aren't quite as intended:

    Since each 3D Shape object is using the same image as other 3D Shape objects on the same "tile," this seems like something that should work and also reduces object count. What could be even more efficient is creating only enough Sprites to represent every image/animation, and then be able to re-use those where needed to apply images to the necessary 3D Shape objects, reducing the object count - and improving performance, as there IS a verifiable impact - even further. Mikal has implemented a similar solution for his 3D Object addon and it works wonders around saving memory usage and eliminating the need to have multiple copies of the exact same object floating around eating up CPU cycles and memory.

    As an example, all of the 3D Object in the image below - the terrain is a DrawCanvas mesh and uses only standard C3 features, the trees/rocks are what I'm referring to - reference the same "prefab" object that has the model & texture data. Similar to the official 3D Shape object, deleting the original would also remove it from every instance of the object, so this 3rd-party addon is already working in a way more in line with how the rest of C3 functions than the official 3D Shape object. It would be nice to see parity for the reasons described above, and this would also bring the 3D Shape object in line with how (I think) people generally expect C3 to work.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • Realizing I posted the above over the holidays, so just tagging Ashley again. If any of what I'm saying above is possible, I'll file a feature request, but if it's not, I'd rather not spend the time filling it out (whenever the new platform is ready).

    Thanks!

  • We get so many feature requests it's difficult to even respond to them all, especially when they are long and detailed.

    You should already be able to choose individual images per 3D shape instances using a sprite in a container. If you are proposing something to improve performance, you should include benchmarks - guesswork does not make for a good case.

  • We get so many feature requests it's difficult to even respond to them all, especially when they are long and detailed.

    You should already be able to choose individual images per 3D shape instances using a sprite in a container. If you are proposing something to improve performance, you should include benchmarks - guesswork does not make for a good case.

    Ashley, I have to say if you're going to respond to something in the future, please consider taking the approach of reading at least a little of it first instead of just posting different variations of the same non-response that makes it very obvious you did not. I'm sure this is where you'd like to express some frustration in not getting things 100% your way, but it really is very frustrating for end users that it seems best for anyone who's not an absolute beginner or has used any other software in their lives to just nope out of these forums and never, ever attempt communication with the people running them or developing the product.

    I wish I could say that is just my position, but it seems to be the general consensus amongst a majority of experienced users, quite a few of which told me my original post was a waste of time because we all knew what your response would be - and was, because it's that predictable.

    On a related note, these claims you made about working with Safari/Apple on iOS - which I took the time to read - mostly apply to dealing with Scirra in any fashion as well.

    assets.publishing.service.gov.uk/media/6229ae538fa8f526d520d0b8/Scirra_Ltd.pdf

    This line in particular from your writing stands out:

    "It's difficult to objectively measure software quality and demonstrate that Safari is inferior in this regard. However to those working in the field there is a clear quality difference..."

    Oh, that second sentence. What a bugger. Consider how would you - and do, since you basically just did it in your reply - respond to such a line from a Construct user.

    Difficult to deal with, non-responsive to user needs, new developments (that would be useful for users in a real-world scenario) etc. Sounds pretty familiar to us. It's interesting that you believe it's a problem when you personally have to deal with it, but not when your users do.

    Take the above as some paying user insights to seriously consider as you're looking to grow your user base, and I would imagine revenue stream, in ways that don't involve just raising prices and the subscription triage they invariably cause. Because that's what they are.

    Good luck.

  • I did read your post, and I thought about it. However it sounds like everything is already possible using the containers approach. Therefore it appears to be a suggestion primarily for a particular kind of optimisation. Discussion of performance without verifiable benchmarks and measurements is pretty pointless. That makes it hard to justify or even comment on its appropriateness.

    Further it should be a well-known issue that we get far, far more feature suggestions than we can possibly deal with. Yet again, I must make it clear that this is not because we don't like anyone's ideas; we'd do all of them if we could. It is solely a problem of resources. We'd need 10x as many employees to do everything everyone asked of us, and in such a scenario, I am certain people would respond by asking for another 10x as many suggestions. It will never end. So we must be pretty ruthless about how we prioritise requests.

    If you read our suggestion guidelines, we include some advice on what we consider a higher priority request. In particular see this section from the suggestion guidelines:

    ideally the suggestion should make something possible that was previously impossible. Otherwise ideally it makes something that was previously very difficult significantly easier. If it's not clear that either is the case - especially if it's adding a second way to do something that's already possible - it will likely be declined.

    I'm afraid in this case what you are suggesting appears to already be possible by the containers approach and so falls in to this category. If you want to increase the chance that suggestions are seriously considered, I'd advise to read those suggestion guidelines carefully and do your best to follow them. Otherwise you will just end up making lots of suggestions that are unlikely to be accepted due to having to ruthlessly prioritise things, and frustration may result.

    It's unreasonable to compare a few people working in an office in south-west London to a multi-national, trillion-dollar global megacorporation with over 160,000 employees which also has sole control over significant sections of the software industry (and in my opinion abuses such control, which was the main purpose of my complaint to the CMA).

    I can see how it is frustrating when users ask for things and regularly run in to the fact we have limited resources. However it is a fact of life. We cannot do everything. If people ask 100 things of us we can maybe do 10, during which time people will ask for another 100 things. It's just how it works. While I accept this can be frustrating, I must warn you that this is not an excuse to proceed to make even stronger demands, or start to make strong criticisms of us solely because we are unable to complete a superhuman amount of work. This has in fact in the past led a very small number customers to be abusive, which is compeletely unacceptable. This is one of the reasons we include in our Forum & Community guidelines:

    Demanding impractical measures or infeasible solutions. If we say we can’t do something, it’s not because we don’t want to, or we’re being difficult, we genuinely can’t do everything!

    Please note that in extremis continuing along such a path may result in moderation action. As I have gone to pains to explain, this stems from the sheer fact that we have limited resources and cannot do everything everyone asks of us. If you disregard that and resort to demanding things in even stronger terms, this is the point at which we may turn to moderation action.

Jump to:
Active Users
There are 1 visitors browsing this topic (0 users and 1 guests)