[SOLVED] Getting toString error on keyboard isPressed

Hi @thebosser24,

Didn’t I tell you to put it in your update function? We had too many talks today I forgot :sweat_smile:

im in calss so i will try it in about 5 minutes

1 Like

That’s the (first) problem. The code must be in the update function. Only code in the update function is executed continuously. All other code will only be executed when you specify it yourself.

1 Like

im back

i have a problem (after the mouse move)

var Movement = pc.createScript('Movement');

Movement.attributes.add('camera', {
    type: 'entity',
    description: 'Optional, assign a camera entity, otherwise one is created'
});

Movement.attributes.add('power', {
    type: 'number',
    default: 2500,
    description: 'Adjusts the speed of player movement'
});

Movement.attributes.add('lookSpeed', {
    type: 'number',
    default: 0.25,
    description: 'Adjusts the sensitivity of looking'
});

// initialize code called once per entity
Movement.prototype.initialize = function() {
    this.force = new pc.Vec3();
    this.eulers = new pc.Vec3();

    var app = this.app;

    // Listen for mouse move events
    app.mouse.on("mousemove", this._onMouseMove, this);

    // when the mouse is clicked hide the cursor
    app.mouse.on("mousedown", function () {
        app.mouse.enablePointerLock();
    }, this);

    // Check for required components
    if (!this.entity.collision) {
        console.error("First Person Movement script needs to have a 'collision' component");
    }

    if (!this.entity.rigidbody || this.entity.rigidbody.type !== pc.BODYTYPE_DYNAMIC) {
        console.error("First Person Movement script needs to have a DYNAMIC 'rigidbody' component");
    }
    
    if (this.app.root.findByName('Handgun')){
    this.rounds = 12;
}

    if (this.app.mouse) {
        this.app.mouse.on(pc.EVENT_MOUSEDOWN, this.onMouseDown, this);
        this.app.mouse.on(pc.EVENT_MOUSEUP, this.onMouseUp, this);
        this.app.mouse.on(pc.EVENT_MOUSEMOVE, this.onMouseMove, this);
    }
};

// update code called every frame
if (this.app.keyboard.wasReleased(pc.KEY_1) ){
this.app.root.findByName('Flashlight').enabled = true;
this.app.root.findByName('Pistol').enabled = false;
}
if (this.app.keyboard.wasReleased(pc.KEY_2) ){
this.app.root.findByName('Flashlight').enabled = false;
this.app.root.findByName('Pistol').enabled = true;
}
 if(this.app.keyboard.wasPressed(pc.KEY_Q))
        this.entity.rigidbody.applyImpulse(0, 0.1, 1);
}
  f(this.app.keyboard.wasPressed(pc.KEY_E))
        this.entity.rigidbody.applyImpulse(0, 0.1, -1);  
}

Movement.prototype.update = function(dt) {
    // If a camera isn't assigned from the Editor, create one
    if (!this.camera) {
        this._createCamera();
    }

    var force = this.force;
    var app = this.app;

    // Get camera directions to determine movement directions
    var forward = this.camera.forward;
    var right = this.camera.right;


    // movement
    var x = 0;
    var z = 0;

    // Use W-A-S-D keys to move player
    // Check for key presses
    if (app.keyboard.isPressed(pc.KEY_A) || app.keyboard.isPressed(pc.KEY_LEFT)) {
        x -= right.x;
        z -= right.z;
    }

    if (app.keyboard.isPressed(pc.KEY_D) || app.keyboard.isPressed(pc.KEY_RIGHT)) {
        x += right.x;
        z += right.z;
    }

    if (app.keyboard.isPressed(pc.KEY_W) || app.keyboard.isPressed(pc.KEY_UP)) {
        x += forward.x;
        z += forward.z;
    }

    if (app.keyboard.isPressed(pc.KEY_S) || app.keyboard.isPressed(pc.KEY_DOWN)) {
        x -= forward.x;
        z -= forward.z;
    }

    // use direction from keypresses to apply a force to the character
    if (x !== 0 && z !== 0) {
        force.set(x, 0, z).normalize().scale(this.power);
        this.entity.rigidbody.applyForce(force);
    }

    // update camera angle from mouse events
    this.camera.setLocalEulerAngles(this.eulers.y, this.eulers.x, 0);
    
    // reload gun magazine
    if (app.keyboard.isPressed(pc.KEY_R)) {
        this.rounds = 12;
    }
};

Movement.prototype._onMouseMove = function (e) {
    // If pointer is disabled
    // If the left mouse button is down update the camera from mouse movement
    if (pc.Mouse.isPointerLocked() || e.buttons[0]) {
        this.eulers.x -= this.lookSpeed * e.dx;
        this.eulers.y -= this.lookSpeed * e.dy;
    }
};

Movement.prototype._createCamera = function () {
    // If user hasn't assigned a camera, create a new one
    this.camera = new pc.Entity();
    this.camera.setName("First Person Camera");
    this.camera.addComponent("camera");
    this.entity.addChild(this.camera);
    this.camera.translateLocal(0, 0.5, 0);
};

Movement.prototype.onMouseDown = function(event) {
    if (event.button === pc.MOUSEBUTTON_LEFT) {
        // shoot
        if (this.rounds !== 0) {
            var bullet = this.app.root.findByName('Bullet').clone();
            this.app.root.addChild(bullet);
            bullet.reparent(this.app.root);
            bullet.setPosition(this.app.root.findByName('Bullet').getPosition());
            bullet.setRotation(this.app.root.findByName('Bullet').getRotation());
            bullet.enabled = true;
            console.log(bullet);
            // update magazine
            this.rounds = this.rounds - 1;
        }
    }
};

how you fix that?

Your code is still not inside the update function. If something is broke double check if you did it right before posting again.

Your update function from begin to end is like below.

Movement.prototype.update = function(dt) {
   // inside the update function
};
1 Like

now its this if(this.app.keyboard.wasPressed(pc.KEY_Q))
this.entity.rigidbody.applyImpulse(0, 0.1, 1);
};
f(this.app.keyboard.wasPressed(pc.KEY_E))
this.entity.rigidbody.applyImpulse(0, 0.1, -1);
}

I fixed the code problems for you.

Help

 if (app.keyboard.isPressed(pc.KEY_1) || app.keyboard.isPressed(pc.KEY_Q)) {
        this.app.root.findByName('Flashlight').enabled = true;
        this.app.root.findByName('Pistol').enabled = false;
    }
    
 if (app.keyboard.isPressed(pc.KEY_2) || app.keyboard.isPressed(pc.KEY_E)) {
        this.app.root.findByName('Flashlight').enabled = false;
        this.app.root.findByName('Pistol').enabled = true;
    }


i’m so sorry,i feel like i had this problem before…

To save the pain just do this:

 if (app.keyboard.isPressed(pc.KEY_1)) {
        this.app.root.findByName('Flashlight').enabled = true;
        this.app.root.findByName('Pistol').enabled = false;
    }
    
 if (app.keyboard.isPressed(pc.KEY_2)) {
        this.app.root.findByName('Flashlight').enabled = false;
        this.app.root.findByName('Pistol').enabled = true;
    };

i also want “Q” and “E”

But why? This will save you alot of pain and 1% sure that the script I made will work. Just try that and see what problems you get.

it was working before, when i added “Q” and “E” it stopped

Because you would need a code that will function keyboard twice in one sentence. But Q and E won’t work. You will have to have Q and E or 1 and 2.

It’s this.app instead of just app.