R0J0hound's Forum Posts

  • I just tested it with "paste layer" and it indeed doesn't work. It works with pasting sprites though. The matrix transformation is probably wrong or something. For now I'm not going to fix it, but at least it's known now.

  • Replaying input would be hard to get exact. I mean you could save the time with the input used but as you said, a variable framerate would through it off.

    You could change your logic to run a fixed number of times per second so input would only be handled at those times. Then to keep things smooth you'd interpolate object positions between logic steps. The pro is replays will be practically exactly the same, but the con is a huge invasive rewrite of your game. Probably too tedious to do since you also wouldn't be able to use behaviors since we can't control when they update.

    The first idea you said won't work sounds better. It can be made to work with different types as well as with objects getting created and destroyed. The simplest way to save a frame would be to take an empty array and the for each of each object type, push it's name, its position and any other info. When that's do you can store it in another array by using array.asJson of the first array.

    Loading a frame is then just a matter of taking one of those json strings, loading it into an array and looping over it and creating objects based on the saved name. Basically just recreating everything every frame.

    To have it work with varying framerate or a different playback speed you'll need to save the time with the json of the frame, and then interpolate between the two closest frames.

    An example is needed here to fully illustrate it. There are probably a few nuances I'm not thinking of.

  • There probably is nothing i can do about that.

  • It's expected since when you destroy an object it's not removed till the next toplevel event.

    So right below event 25 in the first image, or right below event 23 in the second.

  • Here's the other slightly differecnt method:

    https://www.dropbox.com/s/df8jtstjva45m ... .capx?dl=1

    /examples34/road2.capx

    Cars track to the line defined by the road's position and angle. The result is some smoother turning.

    The intersections are done by picking a random outgoing road in roughly the direction the car is facing.

    The car car interactions is slightly different too. If there's another car ahead it stops, but if it's clear further ahead it keeps going. This works well for the most part but it fails pretty bad if cars cross paths in an intersection so they drive through each other.

  • Prominent

    It may be because C2 didn't redraw yet. So it doesn't matter what you draw to the object before grabbing the canvas, because c2 hasn't redrawn the canvas.

    Edit:

    Also I cannot reproduce the flicker issue. Can you show the event used?

  • Prominent

    A quick look shows it doesn't draw right with negative dimensions, but you can make it negative, paste then make it positive again:

    Every tick

    --- canvas: set width to -self.width

    --- canvas: paste layer 1

    --- canvas: set width to abs(self.width)

  • That "load texture from canvas" doesn't work reliably with webgl on since it relies on undefined behavior of the webgl spec. I never got around to removing it.

    That said, it makes sense to me that it would clear only if you clear last. If you cleared first, it would clear but then it would be filled with a copy of the canvas.

  • Hmm, interesting. I've never enountered that. Then again I haven't used webgl in a while either.

    I probably won't be able to look into it very soon.

    Webgl queues up draw calls until a "present" or "flush" call sends everything to the gpu to draw. If you're interested in tinkering with it you can try adding glwrap.flush() to the end of the paste function in the plugin's runtime.js. It may not be that exactly though. It might solve the out of order issue, but it will also make it slower.

  • Prominent

    The paste actions will draw objects as they appear. So to flip it you need to flip after pasting.

    Every tick

    --- canvas: paste layer 1

    --- canvas: set width to -self.width

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
    • Post link icon

    The last game I bought was probably coming up on four years ago. Typically it's 0 a month though.

  • Prominent

    That's not implimented. It proved to be rather complicated the times I looked into it before, and I've been avoiding any plugin modification at this time. So for now only individual objects can be pasted.

  • I don't think you can from the property bar. You'll probably need to do it from events.

  • If it helps this will be hard in any other software as well, unless they handle it specifically.

    Anyways no pathfinding needs to be done at all, unless you need the cars to have a specific destination, otherwise they can just meander.

    Here's one idea:

    https://www.dropbox.com/s/dl5b7om2qwweo ... .capx?dl=1

    /examples34/road_path.capx

    Basically it's a bunch of waypoints connected to make paths. The waypoints can have multiple outgoing paths, so the cars just pick a random one. I made an in game editor so creating the connections is easier. I then can copy the result to a variable and remove the editor if i want to.

    Next step is to make the cars move. I suppose the moveto behavior could have been useful, but I opted to just use events to move from one waypoint to the other. Pretty much the only requirement I had was to specify when to move.

    The car to car awareness proved slightly complicated. It was simple enough to make the car's angle face the direction it was going. Then i could see if another car was ahead with the overlapping at offset condition. That isn't enough for intersections, which would bind up with just that rule. My solution was to only let one car travel through the intersection at one time. It's random so maybe actually making traffic laws would help.

    Overall it works pretty well, however the logic for intersections fails in a few places near intersections, so that would need more work.

    There may be other simpler ways. Standby for a sightly different idea.

  • Use the browser object with the execjs expression. Say you have that json in a text variable called json.

    You could get it with the expression:

    Browser.execjs(json & ".result")

    That should be enough I'd think. If not then then another idea is to convert the Boolean to a number.

    Do that by changing ".result" to ".result?1:0"