throwItem
triggers on self
"impact"parameters
| Parameter | Default Value | Type | Description |
|---|---|---|---|
speed | number | 800 | |
pos | vec2 | vec2(0, 0) | |
sprite | string | 'bullet' | |
width | unknown | null | |
bulletTag | unknown | null | |
impactTag | string | 'body' | |
dangerParam | object | {} | |
bounceParam | object | {} | |
startDistance | number | 80 | |
gravityScale | number | 1 | |
destroyOnImpact | boolean | false | |
bounciness | number | 1 | |
friction | number | 0 | |
aimAngle | number | 40 | |
type | string | 'item' |
example
throwItem({ speed: 800, pos: vec2(0, 0), sprite: 'bullet', width: "null", bulletTag: "null", impactTag: 'body', dangerParam: {}, bounceParam: {}, startDistance: 80, gravityScale: 1, destroyOnImpact: false, bounciness: 1, friction: 0, aimAngle: 40, type: 'item'}),function throwItem(p) { const param = { speed: 800, pos: vec2(0, 0), sprite: 'bullet', width: null, bulletTag: null, impactTag: 'body', dangerParam: {}, bounceParam: {}, startDistance: 80, gravityScale: 1, destroyOnImpact: false, bounciness: 1, friction: 0, aimAngle: 40, type: 'item', ...p, }; return { id: 'shoot', add() { let aimAngle = param.aimAngle; this.on('aiming', (p) => (aimAngle = p)); this.on('shoot', (p) => { const weaponParam = { ...param, ...p, }; const projectile = add([ sprite(weaponParam.sprite), pos( this.pos .add(weaponParam.pos) .add(Vec2.fromAngle(aimAngle).scale(weaponParam.startDistance)) ), area({ collisionIgnore: weaponParam.collisionIgnore, isSensor: true, }), anchor('center'), opacity(), body({ gravityScale: weaponParam.gravityScale, }), rotate(aimAngle), danger(param.dangerParam), bounce({ direction: Vec2.fromAngle(aimAngle), ...param.bounceParam, }), catchable({ type: p.type }), ]); if (weaponParam.bulletTag) projectile.tag(weaponParam.bulletTag); if (weaponParam.width) projectile.width = weaponParam.width; projectile.onCollide(weaponParam.impactTag, () => projectile.trigger('impact') ); projectile.vel = Vec2.fromAngle(aimAngle).scale(weaponParam.speed); }); }, };}