小编Maj*_*agu的帖子

我可以在事件处理程序上使用闭包(即TButton OnClick)

如果我尝试在事件处理程序上使用闭包,编译器会抱怨:

不兼容的类型:"方法指针和常规过程"

我理解..但有没有办法在方法指针上使用clouser?以及如何定义是否可以?

例如:

Button1.Onclick = procedure( sender : tobject ) begin ... end;
Run Code Online (Sandbox Code Playgroud)

谢谢!

delphi delphi-2009

14
推荐指数
2
解决办法
3238
查看次数

等距屏幕映射

我正在试图找出当我有"斜坡"和+1高度的瓷砖时,如何在鼠标下方获得正确的"活动"瓷砖(见下图).


示例等距图像

当我的世界平坦时,一切都没有问题.一旦我添加了一个高度为+1的瓷砖,以及一个回到+0的斜坡,我的屏幕 - >地图例程仍然看起来好像一切都是"平坦的".

在上面的图片中,绿色的"渐变"是我要渲染的真实图块并计算鼠标 - >地图,但是您在"下方"看到的蓝色图块是计算出来的区域.因此,如果您将鼠标移动到任何深绿色区域,它会认为您正在使用另一个磁贴.

这是我的地图渲染(非常简单)

canvas.width = canvas.width; // cheap clear in firefox 3.6, does not work in other browsers
for(i=0;i<map_y;i++){
    for(j=0;j<map_x;j++){
        var xpos = (i-j)*tile_h + current_x;
        var ypos = (i+j)*tile_h/2+ current_y;

      context.beginPath();
      context.moveTo(xpos, ypos+(tile_h/2));
      context.lineTo(xpos+(tile_w/2), ypos);
      context.lineTo(xpos+(tile_w), ypos+(tile_h/2));
      context.lineTo(xpos+(tile_w/2), ypos+(tile_h));
      context.fill();

    }
}    
Run Code Online (Sandbox Code Playgroud)

这是我的鼠标 - >地图例程:

ymouse=( (2*(ev.pageY-canvas.offsetTop-current_y)-ev.pageX+canvas.offsetLeft+current_x)/2 );
xmouse=( ev.pageX+ymouse-current_x-(tile_w/2)-canvas.offsetLeft );
ymouse=Math.round(ymouse/tile_h);
xmouse=Math.round(xmouse/(tile_w/2));

current_tile=[xmouse,ymouse];
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,我将不得不重新开始并实现一个基于世界的地图系统,而不是一个简单的屏幕 - >地图例程.

谢谢.

javascript tiles isometric

5
推荐指数
1
解决办法
2887
查看次数

TThread的后代,从主线程访问属性

我有一个类是TThread的后代.我有一些只读的公共属性.如果我的主线程在线程处于活动状态时读取这些值,我会遇到问题吗?

delphi multithreading

3
推荐指数
1
解决办法
503
查看次数