R0J0hound's Forum Posts

  • Only idea that comes to mind is to use a tiledbackground object and use the "set face object" from the 3dshape with that.

  • There's no formula, you'll have to use a loop one way or another. Usually you'd use tokenat to get a word at a time, then you'd measure the width of the text somehow and finally add newlines if you exceed a maxwidth. Rough pseudo code of how that may look is here. There are ways it can be improved.

    var x=0
    var maxwidth=100
    var textInput="some kind of text"
    var textOutput=""
    var word=""
    
    start of layout
    repeat tokencount(textInput, " ") times
    -- set word to tokenat(textInput, loopindex, " ")
    -- add measure(word&" ") to x
    -- compare x > maxwidth
    -- -- add newline to textOutput
    -- -- set x to 0
    -- add word&" " to textOutput
    

    The measure function isn't actually in construct. To measure the text it will depend on how you are displaying text.

    If using the text object the best you have is the Text.textwidth expression but that is only updated when the object is drawn. But Javascript can be used to measure the text. Basically in javascript create a html canvas with a 2d context, set the font, and then use context.measureText(text).width. The main thing you'll have to deal with is the font sizes will be different so the font size will have to be scaled somehow. I can't find an example where I figured that one out.

    With spritefonts it can be easier. It has the spritefont.CharacterWidth(char) expression, but since it only measures a character at a time you'll have to use a loop to add the widths up for the whole word. You can also take advantage of mono spaced spritefonts by calculating the width=len(word)*charwidth.

    An alternate way is to use texture atlas of a font and a json of the widths and where to find the letters.

    Anyways here is a c3p that does the text wrapping manually with the last idea. The logic would basically be the same for the others. I don't have any examples for the other object types.

    dropbox.com/s/67ukw6bak4gvq41/no_dom_text_scroll.c3p

    For simple I often I just use the automatic text wrapping used in the text and spritefont objects. Worst case you can just add the newlines yourself to the text you're using if the automatic stuff isn't satisfactory. Those are the only simple solutions I know

  • Looks like you can’t get the pixels per inch (ppi) of the screen with JavaScript.

    If you could then this would be the calculation.

    Meters = Pixels*ppi* 0.0254

    Best we can do is illustrated by this site

    ruler.onl

    Basically there needs to be a calibration step where the user has to input the measurement of the screen.

  • Well width=right-left. When no scrolling is done then width=left+right but only at that spot.

    To center something you’d set x to (left+right)/2 or left+width/2

  • I like dops idea better. Much cleaner.

    I’m not able to open your project right now but I’m assuming the canvas’ origin is centered. This will give an xy that can be directly used to draw to the canvas. No need to subtract the bboxtop and such.

    Tx = (touch.x-canvas.x)*cos(-canvas.angle) - (touch.y-canvas.y)*sin(-canvas.angle) - canvas.width/2

    Ty = (touch.x-canvas.x)*sin(-canvas.angle) + (touch.y-canvas.y)*cos(-canvas.angle) -canvas.height/2

  • So what doesn’t that code you have not do? Any errors show up in the browsers console?

  • I guess look at your use of substring. Just curious why this is needed, you can already paste with ctrl+v or right click and select paste.

  • I’m guessing you’re using the textInput object? First step would be to get the cursor position. If construct doesn’t provide an expression for that you can use js to get that since textInput is an html dom element.

    Anyways you’d then use the len,left and right expressions to insert text.

    Set text to left(textInput.text, pos)&"inserted"&right(textInput.text, len(textInput.text)-pos)

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • X=50+(loopindex%15)*50

    Y=50+int(loopindex/15)*50

  • This isn't a full solution, but it does show how to position a square or triangle to another square or triangle. I did in in a random way for testing, so it's not interactive like you're after yet.

    All the sides of the shapes need to be the same length. So for the triangle it's height= sqrt(3)/2*width. Except I rotated it to point right to make some of the math easier.

    Also the sprite's origins need to be in the center of the shapes. The triangle's should be (width/3, height/2)

    The angle from the center of the shape to the sides would be

    sprite.angle+(0,90,180 or 270) for the square

    sprite.angle+(60,180 or 300) for the triangle

    and the distance from the center of the shape to the edge is width/2 for the square and sqrt(3)/6*height for the triangle.

    To position shape B onto an edge of shape A you'd

    1. position B onto A

    2. set B's angle to an angle to to edge of A

    3. move B forward by A's distance to center

    4. move B forward by B's distance to center

    The final step is to see if the new shape actually fits. We do that with an overlap check between the new object and all the existing ones. In the capx I'm purposely spacing things since objects in contact count as overlapping but that gap can be removed once the new shape is found to fit.

    dropbox.com/s/eybebzudn59vns6/box_tri.capx

    To make it interactive you'd want to do basically oosyrag's idea. Loop over all the shapes, and create new ones at every edge. They stay marked as new and are only added when clicked on, which marks that as new and deletes all the other new ones.

  • Worst case duplicating events is an option instead of using or. But typically I find alternate solutions to using or on a case by case basis. Best I can do is offer possible work arounds or help confirm or figure out its behavior when I get time.

    Dev may weigh in on this later but he’ll probably refer to the manual, or refer to the suggestions platform or bug tracker. At this point in time the way or works probably won’t change because they are worried about keeping backwards comparability.

  • - Has this been discussed before?

    Probably. Kind of hard to search for those discussions though. Or with picking has seemed to be a sticking point over the years for many users.

    - Is there a reason why "OR" works the way it does? it probably made sense at the time. Personally I use it sparingly as I haven’t reasoned how it works in a simple way. Intuitively it tries a condition at a time until one of them is true. The picking handling has been a bit hazy to me. Your observation show that it doesn’t reset the picking after each false condition. There’s probably some utility in that.

    - Has it always been like this?

    The behavior of or has basically been the same since the early versions of Construct 2.

    - Are there any plans for adding a "True OR" condition? I'd love to see a "TOR".

    When just using non picking conditions like system->compare the or behaves just like a logical or in most programming languages. Also the dev seems to keep plans to himself. We only see what they were planning once the feature was added.

    Actually unless you have multiple instances of things using system compares is an ideal solution to avoid the picking or non picking.

  • I guess by default javascript converts numbers into text with as many decimal places as possible.

    The browser console typing 4.8*6 gives 28.799999999999997

    when you use the str expression you get the same: str(4.8*6) -> 28.799999999999997

    But fun fact, if you just try setting text without str construct rounds it slightly to give cleaner values.

    AKA set text to 4.8*6 gives 28.8

    Anyways, that subtlety isn't worth keeping track of. You can use the roundToDp to round to a number of decimal places so the text looks cleaner.

    roundToDp(4.8*6, 10) -> 28.8

  • Here's another test. It let's you distort the mesh with as many or as few points you like. The points act like bones with no rotation and each meshpoint are influenced by four bones to various degrees. It's a different way to manipulate a mesh I suppose.

    dropbox.com/s/9edglsbc529muco/skinning_test4.c3p

    An improvement would be to make it work with rotatable rectangles as bones. The

  • You probably can improve the situation by disabling the rotation setting with the 8direction behavior. Likely there are other tweaks to be had.

    Alternatively here is an event based 8dir like motion using the angle of the sprite. It has turning and strafe with settings for max speed, acceleration and deceleration. For the collision response it considers the player as a perfect circle and uses signed distance fields to allow smooth wall collisions. Basically it gives better collision handling than what usually is done.

    dropbox.com/s/3days6yqvdj1t9w/custom_fps_controler.c3p