作者yenpaul (Paul)
看板Web_Design
标题[问题] javascript 编程上一些小问题
时间Fri Jun 24 16:28:45 2016
js新手发问
最近写js碰到了一个瓶颈
我想在canvas上用飞机射出子弹
目前是用setInterval让飞机和子弹运行
以下代码均是写在setInterval的函数内
可是子弹发生了一些问题
因为我想让子弹从飞机上发射
所以子弹drawImage的x,y座标是用飞机座标的相对位置
然後X轴再多加一个会持续增加的dx
子弹X=飞机X+100+dx;
dx=dx+8;
可是这样每次飞机动子弹也会被牵动
如果将子弹的x,y座标放到setInterval外子弹射出的位置和飞机位置就会不一样
请问一下该如何解决这个问题呢?
另外我是用空白键启动子弹
当keydown时会启动drawImage
但是不知道为什麽他只会启动一次
也就是只能射出一发
该如何设出多发子弹呢?
谢谢帮忙
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 142.129.18.133
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Web_Design/M.1466756928.A.958.html
1F:推 ian90911: 请贴code 06/24 16:43
2F:推 devil115789: 感觉是因为dx会被清掉 所以dx永远都是8这样 我猜的 06/24 17:21
3F:→ ssccg: 子弹X不是=飞机X+...,是等於发射时的飞机X+... 06/24 18:14
4F:→ akccakcctw: 按下空白键时取得当时飞机位置,子弹和飞机不要用相 06/24 18:25
5F:→ akccakcctw: 对位置 06/24 18:25
谢谢大家给的建议
昨天想了很久还是想不出来该如何解
这边贴出子弹的code
function draw(){
if (fireBullet == true){ //当按下空白键时会启动
var bulletX = planeX + 100 + dx;
var bulletY = planeY + 55;
ctx.drawImage(bulletImg, bulletX, bulletY , 30, 15);
dx=dx+5;
}
}
setInterval(draw, 10);
如果想要取得按空白键当时飞机位置又不用到planeX 跟planeY该如何设定呢?
谢谢
※ 编辑: yenpaul (142.129.18.133), 06/25/2016 01:07:41
6F:推 ccvs: 逻辑怪怪的 dx的增减要独立出来吧 06/25 09:48
7F:→ ccvs: 你现在是按下空白键 dx+=5 只会run一次啊 06/25 09:50
dx=dx+5我放里面跑跟外面跑的结果都一样耶...
子弹是如预期的速度往前的
但是现在在想要怎麽按空白键的瞬间从飞机上发射又不用用到飞机的座标
8F:推 xdraculax: 只有击发时初始座标参考飞机,之後移动都参考自己座标 06/25 10:38
9F:→ xdraculax: ,或是把子弹改成雷射(误 06/25 10:38
10F:→ bibo9901: 楼上XDD 06/25 12:00
※ 编辑: yenpaul (142.129.18.133), 06/25/2016 12:12:24
11F:推 ccvs: 比较普遍的方法是写一个子弹的物件 内建回圈去增加dx 06/25 13:17
12F:→ ccvs: 按下空白键时新建子弹物件 06/25 13:17
可是该如何设定子弹射出位置跟飞机一样又不去用到飞机的座标呢?
※ 编辑: yenpaul (142.129.18.133), 06/25/2016 13:36:09
13F:推 ccvs: 你指的是子弹初始位置吧 draw的方法一样在子弹的物件里啊 06/25 15:47
14F:→ ccvs: 把飞机当前的座标传进来当初始位置 06/25 15:47
有没有什麽方法是bulletX, Y第一次用planeX, Y当起始点
後面行进就变成bulletY = bulletY//Y轴不变, bulletX = bulletX+dx//X轴加速前进
如果是这样code该如何改呢?
另外要如何每次按都触发一个新的子弹呢?
谢谢帮忙
※ 编辑: yenpaul (142.129.18.133), 06/25/2016 16:08:47
15F:推 Hevak: 子弹是直线运动的话,你的每一个子弹物件都包含子弹座标X和 06/27 00:47
16F:→ Hevak: Y,还有速度X和Y(射出时先算出来),等四项属性的话,只要se 06/27 00:47
17F:→ Hevak: tInterval选取所有子弹,各自加各自各自的速度XY就好了吧, 06/27 00:47
18F:→ Hevak: 不需要去顾虑飞机的位置在哪 06/27 00:47