小编B1C*_*0PS的帖子

获取没有"px"的样式值的数字 后缀

我正在使用Javascript和HTML制作RTS游戏.听起来雄心勃勃我知道,但我不是在为这里的明星拍摄.只是一些让我受理的东西.

我目前正在研究游戏的运动部分.我有一个应该工作的运动引擎,但是有一个问题.在我的脚本中,我使用不等式语句(><)将绝对定位字符的当前左值和最高值与其目标(可能正在移动)的值进行比较.问题是我得到的反馈形式document.getElementById(nameVar).style.left是字符串(例如200px)而不是数字(例如200),因此比较不起作用.

我的问题是,有没有办法把字符串变成一个我可以操纵我想要的方式的数字?要么通过使用更改的地址,要么一旦我得到它就通过反馈预先形成一些程序.

任何帮助都会很棒.

html javascript css

46
推荐指数
4
解决办法
4万
查看次数

我可以制作本地独立JavaScript程序吗?

可能重复:
您可以使用JavaScript进行桌面开发吗?

我非常熟悉基于Web的JavaScript,因为它涉及到html和canvas,但我想知道是否可以使用不能在浏览器中打开的javascript创建一个完整的独立应用程序.是否有任何GUI或命令提示符允许我这样做?

如果没有,我可能愿意写一些其他可以读取html的程序,就像Notch在Minecraft登录屏幕上做的那样.是否有捷径可寻?

javascript user-interface web-applications local

7
推荐指数
2
解决办法
2万
查看次数

GORM 创建可能已经存在的记录

我在我的 Go 应用程序中使用gorm和 postgres。

我想在数据库中创建一个新用户,但该用户很有可能已经存在。如果是这样,我不想对数据库做任何事情,但我想知道它以便我可以告诉用户。

好消息是,这已经发生了gorm.Create(..)。尝试使用重复的唯一键创建记录将返回错误。有两个问题:

  1. 我想要更好的错误信息。我想编写针对“此电子邮件地址已存在”而不是“存在实际内部错误”的面向用户的自定义错误消息。除了尝试解析Create()似乎容易出错的错误字符串之外,我不知道如何区分这两个事件。
  2. 我不想弄乱我的日志。Create()使用已存在的对象进行调用会将错误消息记录到 stdout。我并不真的认为这是一个“错误”,因为我期待它发生,而且我不想用一堆这些警告淹没我的日志。

我知道我可以使用事务首先检查具有给定 id 的用户,然后在用户不存在的情况下创建它们,但似乎应该有一个更简单的解决方案来解决这样的基本问题。你该怎么做?


我目前正在这样做:

func (self databaseWrapper) CreateUser(user *User) error {
    db := self.db
    db.NewRecord(*user)
    err := db.Create(user).Error
    if err != nil {
        if db.Where(user.ID).Take(&User{}).Error == nil {
            return fmt.Errorf("A user already exists with id %v", user.ID)
        }

        if db.Where(User{Email: user.Email}).Take(&User{}).Error == nil {
            return fmt.Errorf("A user already exists with the given email address: %v", user.Email)
        }

        return fmt.Errorf("Error creating user")
    }
    return …
Run Code Online (Sandbox Code Playgroud)

postgresql go go-gorm

6
推荐指数
2
解决办法
3309
查看次数

gtk-rs:如何从另一个线程更新视图

我正在使用gtk-rs创建一个 UI 应用程序。在该应用程序中,我必须生成一个线程来持续与另一个进程通信。有时,我必须根据该线程中发生的情况更新 UI。但是,我不确定如何执行此操作,因为我无法跨线程保存对 UI 任何部分的引用。

这是我尝试过的代码:

use gtk;

fn main() {
    let application =
        gtk::Application::new(Some("com.github.gtk-rs.examples.basic"), Default::default()).unwrap()

    application.connect_activate(|app| {
        let ui_model = build_ui(app);
        setup(ui_model);
    });

    application.run(&[]);
}

struct UiModel { main_buffer: gtk::TextBuffer }

fn build_ui(application: &gtk::Application) -> UiModel {
    let glade_src = include_str!("test.glade");
    let builder = gtk::Builder::new();
    builder
        .add_from_string(glade_src)
        .expect("Couldn't add from string");

    let window: gtk::ApplicationWindow = builder.get_object("window").unwrap();
    window.set_application(Some(application));
    window.show_all();

    let main_text_view: gtk::TextView = builder.get_object("main_text_view")

    return UiModel {
        main_buffer: main_text_view.get_buffer().unwrap(),
    };
}

fn setup(ui: UiModel) {
    let child_process = …
Run Code Online (Sandbox Code Playgroud)

multithreading rust gtk3 gtk-rs

6
推荐指数
1
解决办法
1918
查看次数

Java Graphics2D - 使用渐变不透明度绘制图像

使用Graphics2d,我试图BufferedImage在背景图像上绘制.在这张图片的任意一点,我想在绘制的图像中"切出一个圆孔"让背景显示出来.

我希望这个洞不是一个坚固的形状,而是一个渐变.换句话说,BufferedImage应该具有与其距孔中心的距离成比例的α/不透明度.

我对Graphics2d渐变有点熟悉AlphaComposite,但有没有办法将它们结合起来?

是否有(不是非常昂贵)的方式来实现这种效果?

java gradient alpha image graphics2d

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

在Rust中缓存资源的惯用方法

我是Rust的新手,我正在用活塞发动机进行一场比赛,让我的脚湿润.

我想使用精灵表来渲染一堆实体,但很多实体可能会共享精灵表,所以我只想加载和存储每个文件的一个副本.

在伪代码中,我的方法基本上是这样的:

fn get_spritesheet(hashmap_cache, file):
    if file not in hashmap_cache:
        hashmap_cache[file] = load_image_file(file)

    return hashmap_cache[file]
Run Code Online (Sandbox Code Playgroud)

那么可能是这样的:

//These 'sprite' fileds point to the same image in memory
let player1 = Entity { sprite: get_spritesheet(cache, "player.png") };
let player2 = Entity { sprite: get_spritesheet(cache, "player.png") }; 
Run Code Online (Sandbox Code Playgroud)

但是,我正在使用Rust的所有权系统遇到很多障碍(可能是因为我不理解它).

据我所知,我希望cahe/hashmap"拥有"图像资源.具体来说,返回引用(如在get_spritesheet函数中)似乎很奇怪.此外,结构是否可能不拥有其所有成员?我想是的,但我对如何做到这一点很困惑.

rust

4
推荐指数
1
解决办法
434
查看次数

AES-GCM 模式的正确 nonce/iv 大小

编辑:问题可以简化为:以下 Node.js 代码给出了“无效的 IV 长度”错误。为什么?IV应该是什么?

const crypto = require('crypto')
const decipher = crypto.createDecipheriv('aes-128-gcm', crypto.randomBytes(16), crypto.randomBytes(16))
Run Code Online (Sandbox Code Playgroud)

我在 GCM 模式下使用 AES 来加密一些数据,但我使用两种不同的语言和库进行加密和解密,而且它们似乎对我需要的东西有不同的词汇表。

我正在使用 Python 库 ( Crypto ) 进行加密。该encrypt_and_digest方法接受一个 128 位的密钥和一条消息,并返回一个 128 位的随机数、128 位的标签和一个密文。

(取自本例的加密代码)

我正在使用默认的 Node.js加密库进行解密。该库需要一个会话密钥、一个标签和一个 IV。当我将 Python 库中的 nonce 作为 IV 传递时,它给了我一个“无效的 iv 大小”错误。 Node 库的示例似乎使用 12 个字符的字符串作为 IV。

我的解密代码如下所示(取自此处):

var decipher = crypto.createDecipheriv(algorithm, password, nonce)
decipher.setAuthTag(encrypted.tag);
var dec = decipher.update(encrypted.content, 'hex', 'utf8')
Run Code Online (Sandbox Code Playgroud)

这个方案的 IV 和 nonce …

python cryptography aes node.js aes-gcm

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

Android Camera2 手动闪光并不总是有效

我在 Android 6.1、sdk 23 上使用新的camera2 api。

我有两个请求:预览和静态图像捕获请求。我想让闪光灯在每次静止图像请求时关闭,但没有任何预闪光。现在,我的请求如下所示:

CaptureRequest.Builder requester = mCameraDevice.createCaptureRequest(mCameraDevice.TEMPLATE_STILL_CAPTURE);
        requester.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
        requester.set(CaptureRequest.CONTROL_CAPTURE_INTENT, CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE);
        requester.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED);
        requester.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL);
        requester.addTarget(mCaptureBuffer.getSurface());

mCaptureSession.capture(requester.build(), null, null);
Run Code Online (Sandbox Code Playgroud)

它似乎适用于一部手机(摩托罗拉 Moto G),但不适用于另一部手机(Nexus 5 - 闪光灯根本无法打开)。我知道 Nexus 的闪光灯可以工作,因为我可以用其他相机应用程序触发它,所以我猜有一些默认值我没有设置。

还有另一种方法可以做到这一点/我可以设置更多标志吗?

谢谢!

编辑:


事实证明,我遇到的很多麻烦都源于使用仅LIMITED支持camera2的设备。仅仅因为您可以使用相机 2 访问相机并不意味着您可以控制所有功能。查看答案以了解更多信息

android android-camera android-camera2

2
推荐指数
1
解决办法
4871
查看次数