我正试图找到一种干净的方法来"移动画布元素的相机".
这适用于我的原型游戏(侧卷轴).我很乐意认为有一个更好的解决方案,而不是移动整组节点来模拟移动的"相机".
几乎可以肯定已经阅读了一个简单的操作方法(使用偏移?)但事实上我没有发现任何类似的东西开始引起怀疑......我想象中读到了吗??
谢谢你帮我澄清...... J
我有这个PHP函数,必须在给定的数组上执行一些处理:
processArray($arrayToProcess) {
$arrayToProcess['helloStackOverflow'] = TRUE;
}
Run Code Online (Sandbox Code Playgroud)
稍后,代码调用以下内容:
$niceArray = array('key' => 'value');
processArray($niceArray);
Run Code Online (Sandbox Code Playgroud)
在processArray函数之外,"helloStackOverflow"键不可用.我试着调用以下内容:
processArray(&$niceArray);
Run Code Online (Sandbox Code Playgroud)
使用"&"会有所帮助,但会引发一些警告:
不推荐使用的功能:不推荐使用Call-time pass-by-reference; 如果您想通过引用传递它,请修改populateForm_withTextfields()的声明
试过&在那里,但这只是停止代码.
我该怎么做?
不习惯使用php,我遇到了访问数组及其子数据的问题.
$form['signatories']['signatory1'] = array(...);
Run Code Online (Sandbox Code Playgroud)
我必须创建一个"指针"指向上面一行中创建的数组,我期望以下工作:
$cluster = $form['signatories']['signatory1'];
Run Code Online (Sandbox Code Playgroud)
测试我访问相同的"内存空间"证明我错了:
$cluster['signatory_name'] = array(...)
// $form['signatories']['signatory1'] has no elements
// $cluster has a sub element
Run Code Online (Sandbox Code Playgroud)
像cluster一样,我希望它指向的数组的副本.
我该怎么办?我尝试使用某些博客中提到的"&"参考符号,但这没有帮助.
谢谢!J.
使用Angular 2 (4) + Material,我需要自定义一个组件的主题。我首先尝试使用内置调色板,但不断收到“错误:未定义”。仅当 map-get 传递“primary”、“accent”或“warn”作为第二个参数时才有效:
样式.scss
@import '~@angular/material/theming';
@include mat-core();
@import 'app/app.component.scss-theme';
$default-theme-primary: mat-palette($mat-light-green);
$default-theme-accent: mat-palette($mat-indigo);
$default-theme-warn: mat-palette($mat-red);
$default-theme: mat-light-theme($default-theme-primary, $default-theme-accent, $default-theme-warn);
@include angular-material-theme($default-theme);
@include app-component-theme($default-theme);
Run Code Online (Sandbox Code Playgroud)
app.component.scss-theme.scss
@import '~@angular/material/theming';
@mixin app-component-theme($theme){
$primary: map-get($theme, primary);
$accent: map-get($theme, accent);
$text: map-get($theme, text);
$card: map-get($theme, card);
$lighter: map-get($theme, lighter);
$darker: map-get($theme, darker);
.test{
font-size: 5em;
color: mat-color($primary)!important; // works
// color: mat-color($darker)!important; // fails
// color: mat-color($lighter)!important; // fails
// color: mat-color($text)!important; // fails
// color: mat-color($card)!important; // fails
}
} …Run Code Online (Sandbox Code Playgroud) 在服务器自动更新令牌的上下文中,我正在努力解决基本问题:从响应中获取头数据.
它似乎与CORS无关,因为我的Node/express allwos授权/ x-access-token并相应地响应(请参阅下面的网络选项卡screeencap).
我希望看到工作的第一步是简单地从响应中读取标题.请参阅我的代码,它是文档中的样板文件.获取"Content-Length"的事件返回null.
AUTH-service.ts
login(username:string, password:string):Observable<boolean>{
this.loggedIn = false;
return new Observable( (observer:Observer<boolean>) => {
const body = {user: username, pwd: password};
const url = this.config.API_ENDPOINT_PUBLIC_AUTH;
this.httpClient.post(url, body, {
responseType: 'text',
observe: "response"
}).first().subscribe(
(response:HttpResponse<string>) => {
// DEBUG
console.log(response.headers.get('Authorization'));
console.log(response.headers.get('X-Test-Header'));
console.log(response.headers.get('Content-length'));
this.token = response.headers.get('Authorization');
this.storeToken(this.token);
this.currentUser = username;
this.loggedIn = true;
this.authChanged$.next('auth');
observer.next(true);
},
(err) => observer.next(false),
() => {},
);
});
}
Run Code Online (Sandbox Code Playgroud)
控制台输出:
空值
空值
空值
将此与此请求的网络选项卡的内容进行比较:
不用说我的HttpInterceptor也不起作用 - 在响应中提供"Authorization"标头时,它将该值用作新标记.这样可以实现令牌的自动续订:
token.interceptor.ts
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> …Run Code Online (Sandbox Code Playgroud) 我试图在我的画布上设置一个“脏区”以防止重新绘制未移动的项目(背景图像、静态项目等),即只需要重新绘制移动玩家背后的背景
编辑:正如建议的那样,这是它的 jsfiddle http://jsfiddle.net/7kbzj/3/
“更新”方法在那里不起作用,所以它是 moveSprite(),您可以通过单击“移动精灵”链接来运行...基本上,每次单击时,剪切区域都应向右移动 10 像素。剪贴蒙版停留在初始位置,只发生重绘。奇怪的o_O
所以当我初始化我的画布时,一旦背景被绘制,设置我使用 ctx.save() 方法:
function init() {
canvas = document.getElementById('kCanvas');
ctx = canvas.getContext('2d');
ctx.fillStyle = "rgb(0,128,0)";
ctx.fillRect (0,0,320,240);
ctx.save();
setInterval(function () { update(); }, tpf);
}
Run Code Online (Sandbox Code Playgroud)
为了看到剪裁的效果,我在我想剪裁的区域画了一个不同颜色的背景(蓝色的)......结果很糟糕,只有第一个剪裁的区域被涂成蓝色:(
function update() {
setDirtyArea(x,y,w+1,h)
ctx.fillStyle = "rgb(0,0,128)";
ctx.fillRect (0,0,320,240);
x++;
// paint image
ctx.clearRect(x,y,w,h);
ctx.drawImage(imageObj, x, y);
Run Code Online (Sandbox Code Playgroud)
}
function setDirtyArea(x,y,w,h) {
ctx.restore();
// define new dirty zone
ctx.beginPath();
ctx.rect(x, y, w, h);
ctx.clip();
}
Run Code Online (Sandbox Code Playgroud)
我很想看到蓝色区域向屏幕右侧传播……请帮忙,我不明白出了什么问题!谢谢,J。
我将C++用于我项目的一小部分.我必须编写错误的代码,但我对C++的了解就是它,我无法解决这个问题......
请参阅下面的AbstractContactListener.h和.mm文件.问题出在isFixtureCollidingWithFixtureOfType(...)方法中,我无法访问_contact向量.我在这里做错了什么?
标题:
struct JRContact {
b2Fixture *fixtureA;
b2Fixture *fixtureB;
bool operator==(const JRContact& other) const
{
return (fixtureA == other.fixtureA) && (fixtureB == other.fixtureB);
}
};
class AbstractContactListener : public b2ContactListener {
id contactHandler;
public:
std::vector<JRContact>_contacts;
AbstractContactListener(id handler);
~AbstractContactListener();
void isFixtureCollidingWithFixtureOfType(b2Fixture fix, int type);
virtual void BeginContact(b2Contact* contact);
virtual void EndContact(b2Contact* contact);
};
Run Code Online (Sandbox Code Playgroud)
执行:
AbstractContactListener::AbstractContactListener(id handler) : _contacts() {
contactHandler = handler;
}
AbstractContactListener::~AbstractContactListener() {
}
void isFixtureCollidingWithFixtureOfType(b2Fixture fix, int type){
std::vector<JRContact>::iterator ct;
// Next line is faulty... can't call …Run Code Online (Sandbox Code Playgroud) 当发生丢弃时,我需要恢复可拖动的原始位置:
$('.article').droppable( {
drop: function(even, ui){
// ui.draggable.???
}
});
Run Code Online (Sandbox Code Playgroud)
由于我的draggable上有一个"revert:"无效的"属性",我认为原来的位置是存储在某个地方.我怎么能找到它?
谢谢,
我(尝试)在ObjC项目中编写一些(工作)C++ :-) C++库(Box2D)为我提供了一个b2Fixture类,它具有"用户数据"属性,供编码人员存储与他们相关的内容.
在我的例子中,它只需要存储一个整数.从我在ObjC中的主程序,一个是将整数转换为void*:
headFixture->SetUserData( (void*) 10 );
Run Code Online (Sandbox Code Playgroud)
在程序的C++方面的实用程序方法中,我想将用户数据与给定的整数进行比较(即它们是常数,10 =实地,11 =平台等).
第一次比较使用(void*)拒绝编译.在SO上找到了一种不同的方法,如第二次比较所示,它使用*((intptr_t*)...).那个编译,但它发送EXC_BAD_ACCESS:
bool AbstractContactListener::contactContainsType(JRContact contact, int type){
if (( type == ( (void *) contact.fixtureA->GetUserData() )) ||
( type == *( (intptr_t *) contact.fixtureB->GetUserData() ))
) {
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我已经没有想法来解决这个问题了.请帮忙:-)谢谢!J.
编辑/解决方案:
bool AbstractContactListener::contactContainsType(JRContact contact, int type){
if (( type == (intptr_t) contact.fixtureA->GetUserData() ) ||
( type == (intptr_t) contact.fixtureB->GetUserData() )
) {
return true;
};
return false;
}
Run Code Online (Sandbox Code Playgroud)
这个对我有用!
当拖动事件停止时,我必须找到我的div是否与任何其他节点发生冲突.因此,在"停止"事件中,我编写了一个循环,用于检查与相同类型的项目的冲突.
$('.article').draggable({
stop: function(event, ui){
$(".article").each(function (i) {
if(this == ui.helper){
return;
}
// Test collisions
});
}
});
Run Code Online (Sandbox Code Playgroud)
现在,我找不到从循环中排除自己的方法.我期望这和ui.helper是一样的,但它们被认为是独立的元素.我该怎么做?
谢谢,
我正在尝试将以下JS代码翻译成ObjC; 它基本上定义了一个函数并将其存储在一个数组中以便以后执行:
var logic = function() {
me.removeNode(node);
}
this.queue.push(logic);
Run Code Online (Sandbox Code Playgroud)
我的ObjC端口包含方法:-(void)removeNode:(AbstractNode*)node我被卡住了...我想使用指定的"node"参数对此方法进行排队调用...
编辑:我正在阅读选择器.它仍然很模糊,但可能有所帮助.不知何故.或不?
它甚至可能,还是我需要找到一个解决方法:-)?谢谢!
解决这个问题归功于社区:
// Queue declaration
NSMutableArray *IRQ = [[NSMutableArray array] retain];
// Add logic to the queue for delayed execution:
[IRQ addObject:^{ NSLog(@"thanks for the help!"); } ];
// Call later
for (int i = 0; i < [IRQ count]; i++){
void (^delayedCall)(void) = [IRQ objectAtIndex:i];
delayedCall();
}
Run Code Online (Sandbox Code Playgroud)