为什么我的坦克没有出现
Why isn't my tank showing up?
>我画了一张瓷砖地图:
http://www.exeneva.com/html5/movingTankExample/
这是我的启动代码:
function startUp() {
drawScreen();
// Draw the tank
context.drawImage(tileSheet, tankSourceX, tankSourceY, tileWidth, tileHeight, tankX, tankY, tileWidth, tileHeight);
}
drawScreen(( 绘制磁贴图。我想在平铺地图之后绘制坦克,但没有将其放入 drawScreen(( 中,因为我想稍后对坦克进行动画处理和移动(而无需再次调用 drawScreen((。
为什么我的坦克不出现?
我很抱歉你没有阅读链接,我已经在你的最后一个答案上通过了你,并用似乎最简单的方式接受了另一个人的嘶吼。 提斯克,提斯克...
无论如何,要解决这个问题,您必须像以前一样在drawScreen()
方法中绘制坦克,但您必须从关键移动事件内部调用坦克的动画函数。这样,坦克将在不移动时绘制停止,并在移动时绘制动画作为您的原始问题。
编辑:
我现在在我的机器上有了你的整个代码,以下是解决你的问题的步骤,因为我已经给了你很多提示,现在我会给你你想要的代码:
1-负责初始化动画和选择要显示的动画帧的代码是反转的。计数器frameIndex
需要在tankSourceX
和tankSourceY
之前初始化:
// Counter to keep track of the current index of animationFrames
var frameIndex = 0;
// Tank tiles
var tankSourceX = Math.floor(animationFrames[frameIndex] % tilesPerRow) * tileWidth;
var tankSourceY = Math.floor(animationFrames[frameIndex] / tilesPerRow) * tileHeight;
2-将定义帧的变量放在动画函数中,当您更改动画帧时,frameIndex
更改tankSourceX
和tankSourceY
值:
function animateMovement() {
// Animation frames
frameIndex += 1;
if (frameIndex == animationFrames.length) {
frameIndex = 0;
}
tankSourceX = Math.floor(animationFrames[frameIndex] % tilesPerRow) * tileWidth;
tankSourceY = Math.floor(animationFrames[frameIndex] / tilesPerRow) * tileHeight;
}
3-您的绘图和动画函数可以由事件处理程序调用,也可以按开头的间隔调用:
var animateInterval = setInterval(animateMoviment, 200);
var drawingInterval = setInterval(drawScreen, 200);
4-初始化变量作为坦克状态:
var tankState = "stopped";
5-在动画功能上,检查此变量以更改帧:
function animateMovement() {
if (tankState == "moving") {
// Animation frames
frameIndex += 1;
if (frameIndex == animationFrames.length) {
frameIndex = 0;
}
tankSourceX = Math.floor(animationFrames[frameIndex] % tilesPerRow) * tileWidth;
tankSourceY = Math.floor(animationFrames[frameIndex] / tilesPerRow) * tileHeight;
}
}
6-更改事件处理程序以将tankState
设置为moving
:
e = e?e:window.event;
tankState = "moving";
...
7-重置键控事件上的坦克状态:
document.onkeyup = function(e) {
tankMoveX = 0;
tankMoveY = 0;
tankState = "stopped";
}
当然,您可以在关键事件处理程序上调用 animate 和 draw 函数并消除间隔,但通过这种方式,您可以添加更多动画以在相同的函数上运行,这些函数不等待玩家输入,例如 NPC(非 plaing 字符(。
在调用context.drawImage(tileSheet, ...
中,您应该传递坦克图像而不是tileSheet
我想这是地图本身。
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 知道为什么我的旋转木马不会自动更改图片吗
- 为什么我的d3.jsselectAll+过滤器没有过滤
- 为什么不't我的变量在我的控制器中填充后在我的视图中呈现
- 为什么我的点击事件没有使用 react js 触发
- 为什么我的JavaScript堆栈排序函数不起作用
- 为什么使用immutableJS我的状态没有改变
- Don'我不明白为什么我的setInterval+jQuery;不起作用
- 如何在angular js中使用指令.不适用于我的情况,为什么
- 我的jquery代码不起作用.为什么?
- 为什么不't Express呈现我的React应用程序
- 为什么我的按钮组件提交它所在的表单
- 为什么不是'我的JS滑块正在工作
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 为什么不'当单元测试出现解析错误时,我的因果报应测试会失败
- 我不知道为什么我的代码是错误的?又有什么错
- 为什么我的While循环不起作用
- 为什么我的控制器没有启动函数.js脚本
- 为什么我的上下文选择器和.buttonset()在ie中花费了这么长时间
- 为什么我的函数没有被调用呢