[SOLVED] sprite cloning


#1

every time i hit the X button nothing happens, the launcher still works but i don’t see a clone of the sprite

PlayerBullit.prototype.update = function(dt) {
    var play= this.app.root.findByName('player');
    var pos = play.getPosition();
    var e = this.entity.clone();
    if(this.app.keyboard.wasPressed(pc.KEY_X)){
        e.enabled=true;
        e.setPosition(pos.x,pos.y,0);
        
    }
    if(this.app.keyboard.wasReleased(pc.KEY_X)){
        e.enabled=false;
    }
};

#2

You will need to add the cloned entity to the scene hierarchy (eg this.app.root.addChild(e)) .


#3

i placed it under the KEY_X command but it crashes the test


#4

Do you have a project link to look at?


#5

https://playcanvas.com/editor/scene/661029


#6

TLDR; there’s an infinite loop happening. As you are cloning the entity where the input is processed, as the clone gets added to the scene hierarchy, it’s update gets called and because it is in the same frame, the keypress is still considered as ‘wasPressed’, it clones itself again, etc forever.

So the solution is to move the logic for the cloning outside the entity you are cloning (ideally in a separate script where all the input can be processed separately from the entity’s logic).

See https://playcanvas.com/editor/scene/661419 for example. Input.js specifically: https://playcanvas.com/editor/code/585203?tabs=15311943


#7

what does it mean by fireballprefab?


#8

It’s just handing a reference to the fireball entity that we are cloning. I’m just using Unity’s terminology to indicate that it is something that will be cloned. (Check the scenes Root entity for the usage of the input script).


#9

just a small question. i want the shots to go in the direction the player faces, but when i think about it, the shots would turn around when the player turns around


#10

What’s the question? :sweat_smile:


#11

this is what i want the shots to do

  1. go in the direction the player faces(without changing directions)
  2. delete when it hits the edge of the screen

#12
  1. As long as the shots are not children of the player entity, they will not be affected by the player changing direction unless you have code that explicitly does so.

  2. If the camera is a moving camera, you can do world to screen to check if it is in view. It may not be the logic you want for the game though and may prefer them to be destroyed after a certain amount of time has passed.


#13

i thougt that just to have entitys outside of the camera and when they touch it they delete themselves


#15

how do you treat flipx as a bool?

if(entityvar.sprite.flipx===true){}