也许这个工具可以帮助你,一个全交互管理器,帮助 Three.js 轻松绑定交互事件
更多细节参见 三.交互
import { Scene, PerspectiveCamera, WebGLRenderer, Mesh, BoxGeometry, MeshBasicMaterial } from 'three';
import { Interaction } from 'three.interaction';
const renderer = new WebGLRenderer({ canvas: canvasElement });
const scene = new Scene();
const camera = new PerspectiveCamera(60, width / height, 0.1, 100);
// new a interaction, then you can add interaction-event with your free style
const interaction = new Interaction(renderer, scene, camera);
const cube = new Mesh(
new BoxGeometry(1, 1, 1),
new MeshBasicMaterial({ color: 0xffffff }),
);
scene.add(cube);
cube.cursor = 'pointer';
cube.on('click', function(ev) {});
cube.on('touchstart', function(ev) {});
cube.on('touchcancel', function(ev) {});
cube.on('touchmove', function(ev) {});
cube.on('touchend', function(ev) {});
cube.on('mousedown', function(ev) {});
cube.on('mouseout', function(ev) {});
cube.on('mouseover', function(ev) {});
cube.on('mousemove', function(ev) {});
cube.on('mouseup', function(ev) {});
// and so on ...
/**
* you can also listen at parent or any display-tree node,
* source event will bubble up along with display-tree.
*/
scene.on('touchstart', ev => {
console.log(ev);
})
scene.on('touchmove', ev => {
console.log(ev);
})
试试这个——
SELECT n.*, c2.* FROM country c
JOIN country_news cn
ON cn.country_id = c.id
JOIN news n
ON cn.news_id = n.id
LEFT JOIN country_news cn2
ON cn2.news_id = n.id
LEFT JOIN country c2
ON cn2.country_id = c2.id
WHERE c.id = 1
记录卡在这里了
您认为您想要一个树视图,其中包含经过的时间、调用计数等,
但您需要的是通过找到可以修复的内容来优化应用程序,以消除不必要的挂钟时间。
这是一个最有效的示例,在我的 。
某些事情很容易花费大量时间,因为它不一定局限于特定的例程、特定的代码行或程序中的特定路径 调用树。
无论它在哪里,该方法都能找到它。
更重要的是,它不会费心去衡量超出发现问题所需的最低限度的问题。
但是,如果您确实觉得需要购买或安装某些东西,那么它对您没有帮助。
据我所知,这很难做到。 Unix 信号是原始的。
默认情况下,信号被传递到随机线程。为了解决这个问题,通常采用的技巧是阻止除一个线程之外的所有线程中的信号。最简单的方法是使用 pthread_sigmask 阻止 main 中的所有信号,然后创建线程(它将继承信号掩码),然后使用一个单独的线程来执行 sigwait /sigwaitinfo 阻止信号。这会强制将信号传递到该线程。
在信号捕获线程中消耗信号后,您需要使用 main 的线程 id 和捕获的信号编号执行 pthread_kill
以将信号转发到 main。问题是 main 会被阻塞。
在转发信号之前,您无法真正解除阻塞 main 并阻塞信号捕获线程,因为这是一种竞争条件 - 没有什么可以阻止第二个信号进入,并且信号捕获线程看不到它。这一切的努力都白费了。
您可以让信号线程通过某种其他形式的 IPC(管道或其他形式)向 main 发送一条消息,说“捕获 XX,采取适当的操作”。也许这就足够了?
也许有人有一些聪明的想法,但我怀疑底线是这不是 UNIX 中通常的做法。
这可行:
/^[a-z][a-z0-9_]{0,7}$/i
例如,
/^[a-z][a-z0-9_]{0,7}$/i.test('a1234567'); // true
/^[a-z][a-z0-9_]{0,7}$/i.test('01234567'); // false
如果你打算在 2011 年学习 PHP,那就好好学吧。
首先,不推荐使用 mysql_query 或 mysql_ Anything 代码。不要再使用它了。
别担心 - 我建议的内容非常适用于 mysql 数据库,但它也适用于任何数据库:
- PDO 是 PHP 社区不断添加功能的内容,所以我会使用它。
- PDO 也更强大,并且使以后切换数据库变得更容易。
- MYSQLi(i 代表改进)取代了已弃用的基于 mysql_ 的查询,但我肯定会直接使用 PDO。
- 您还可以轻松创建一个数组
稍后对象的一行更改!
其次,Phil 提到了 fetchAll()。这是最终目标。其他方式只需一次一行地移动即可。这使用推土机而不是铲子。注意:这不是选择大量数据的最佳方法,因为它会耗尽内存。否则的话,也没关系。
为此,请使用准备好的过程来保护您的代码免受 SQL 注入攻击。
<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
/* Fetch all of the rows into an array */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);
?>
基于@Sajid回复:
if (preg_match_all('/(?:SB.+?EB(?:[\r\n]+|$))/', $string, $result))
{
for ($i=0; $i<count($result[0]); $i++)
{
$single_item = $result[0][$i];
$single_item = str_replace("SB","",$single_item);
$single_item = str_replace("EB","",$single_item);
if (preg_match('/(\d{3}\.\d{3}\.\d{2})/', $single_item))
{
$id = $single_item;
$qty = $result[0][$i-2];
$name = $result[0][$i-1];
$price = $result[0][$i+1];
$total = $result[0][$i+2];
}
}
}
有点乱,但它有效! :)
某些字符,例如带重音的字母(例如 é
)可以用两种方式表示 - 单个代码点 U+00E9
或纯字母后跟组合重音符号U+0065 U+0301
。普通标准化将选择其中之一来始终表示它(NFC 的单个代码点,NFD 的组合形式)。
对于可以由多个基本字符序列和组合标记表示的字符(例如,“s,下面的点,上面的点”与将点放在上面然后将点放在下面或使用已经具有其中一个点的基本字符),NFD 将也选择其中一个(下面是第一个,因为它发生了)
兼容性分解包括许多“不应该真正”是字符的字符,但它们是因为它们被用于遗留编码中。普通规范化不会统一这些(为了保持往返完整性 - 这对于组合形式来说不是问题,因为没有遗留编码[除了少数越南编码]同时使用这两种编码),但兼容性规范化会统一。想想一些东亚编码中出现的“kg”公斤符号(或半角/全角片假名和字母表),或者 MacRoman 中的“fi”连字。
有关更多详细信息,请参阅 http://unicode.org/reports/tr15/。
两种可能性。
1)退出模拟器,然后运行你想运行的应用程序
2)只需停止使用模拟器的应用程序并运行您想要运行的应用程序
正如您所说,+0.5f 是四舍五入到最接近的数字。理想情况下,当 ldpi 的数字按比例缩小时,值 1 变为 0.75,当转换为 int 时,该值表示为小于 1 或 ~=0。通过添加舍入数字,该数字提高到 1.25,当转换为 int 时,会产生 <2 或 ~=1。这样,您的精灵应该以最小移动 1 进行绘制。以不同速度移动的精灵会以相同的速度移动的唯一原因是,如果它们太接近,以至于在舍入时,使用比例尺它们最终会具有相同的大小你给了。总而言之,你的方程与我见过的其他方程非常相似。我正在为我工作的公司制作一款使用 SurfaceView 的游戏,虽然我无法详细说明代码,但你的问题是我一段时间以来一直困扰的问题。我不确定你的物理如何更新,但也许这是你应该检查的事情,特别是它如何计算游戏计时器的滴答声。您的应用程序可能会读取其刻度,因为它们之间的距离太近,无法达到在转换为 int 后移动 1.25 或 1 的点,因此您的精灵看起来不会移动。我短暂地遇到了这个问题,首先查看我的速度,直到我发现错误出在计时器中。我注意到的另一件事是你的算法收集密度。在 mdpi 设备上,返回 1 还是 160?这可能会产生很大的影响,但我不确定,因为我使用的方程不同。您找到的另一个方程是 android.developer.com 开发指南中列出的方程的释义,用于描述操作系统如何将像素转换为倾角。人们倾向于引用的原因是提供参考,以帮助其他人构建自己的算法,以适合其应用程序的需求。希望这会有所帮助,因为这确实是我目前能给出的最佳答案。抱歉,有任何打字错误,我是通过手机发送的
当您使用批量加载器批量加载数据时,不会加载或使用您的模型定义 - 数据会使用低级 API 直接加载到数据存储中。因此,您的模型代码也不会被调用。你的“非常肮脏的解决方案”是解决这个问题的正确方法。
如果您想在文本末尾插入 Drawable,Drawable 会隐藏文本的最后一个字符,以避免在文本末尾添加另一个字符并从该字符开始绘制。
val myText = "Your text"
val span: Spannable = SpannableString(myText+"-")
val android: Drawable = ContextCompat.getDrawable(this, R.drawable.yourDrawable)!!
android.setBounds(0, 0, 30, 30)
val image = ImageSpan(android, ImageSpan.ALIGN_BOTTOM)
span.setSpan(image, span.indexOf("-"), span.indexOf("-")+1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
基本上有两种方法可以做到这一点:
如果该对象在某种程度上与另一个视图或编辑器的选择相关,那么您可以使用编写一个 SelectionListener 来获取当前选择,然后使用以下方法设置正确的对象方法:
getViewSite().getPage().addSelectionListener(mySelectionListener)
否则,定义一个您的代码和视图都可以访问的对象 (例如,使用静态属性、OSGi 服务或 Eclipse 扩展),并且您可以使用该对象来传递信息。您的数据源更新此对象,并且您可以定义视图可以将自己注册到的更改侦听器/回调。
There are basically two ways to do this:
If the object is somehow related to the selection of another view or an editor, then you could use write a SelectionListener that gets the current selection, and then sets the correct object using the following method:
getViewSite().getPage().addSelectionListener(mySelectionListener)
Otherwise, define an object that both your code and the view can reach (e.g. using a static attribute, an OSGi service or an Eclipse extension), and you can use that object to pass information. Your data source updates this object, and you can define a change listener/callback that the view can register himself to.
将对象传递给 rcp 视图