我试图通过代码获取我的游戏截图并通过意图分享.我可以做这些事情,但屏幕截图总是显示为黑色.以下是与共享屏幕截图相关的代码:
View view = MainActivity.getView();
view.setDrawingCacheEnabled(true);
Bitmap screen = Bitmap.createBitmap(view.getDrawingCache(true));
.. save Bitmap
Run Code Online (Sandbox Code Playgroud)
这是在MainActivity中:
view = new GameView(this);
view.setLayoutParams(new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.FILL_PARENT,
RelativeLayout.LayoutParams.FILL_PARENT));
public static SurfaceView getView() {
return view;
}
Run Code Online (Sandbox Code Playgroud)
而观点本身:
public class GameView extends SurfaceView implements SurfaceHolder.Callback {
private static SurfaceHolder surfaceHolder;
...etc
Run Code Online (Sandbox Code Playgroud)
这就是我绘制一切的方式:
Canvas canvas = surfaceHolder.lockCanvas(null);
if (canvas != null) {
Game.draw(canvas);
...
Run Code Online (Sandbox Code Playgroud)
好的,根据一些答案,我构建了这个:
public static void share() {
Bitmap screen = GameView.SavePixels(0, 0, Screen.width, Screen.height);
Calendar c = Calendar.getInstance();
Date d = c.getTime();
String path = …Run Code Online (Sandbox Code Playgroud) 我正在使用javascript中的socket io创建一个多人游戏.除了客户端插值之外,游戏目前完美无缺.现在,当我从服务器获取数据包时,我只需将客户端位置设置为服务器发送的位置.这是我试图做的:
getServerInfo(packet) {
var otherPlayer = players[packet.id]; // GET PLAYER
otherPlayer.setTarget(packet.x, packet.y); // SET TARGET TO MOVE TO
...
}
Run Code Online (Sandbox Code Playgroud)
所以我设置了球员的目标位置.然后在Players Update方法中,我只是这样做:
var update = function(delta) {
if (x != target.x || y != target.y){
var direction = Math.atan2((target.y - y), (target.x - x));
x += (delta* speed) * Math.cos(direction);
y += (delta* speed) * Math.sin(direction);
var dist = Math.sqrt((x - target.x) * (x - target.x) + (y - target.y)
* (y - target.y));
if (dist < treshhold){
x …Run Code Online (Sandbox Code Playgroud) 我创建了一个画布,我已经添加了鼠标事件:
canvas = document.getElementById('canvas');
context = canvas.getContext('2d');
canvas.width = screenWidth;
canvas.height = screenHeight;
...
// CALLED AT START:
function setup() {
// Mouse movement:
document.onmousemove = function(e) {
e.preventDefault();
target.x = e.pageX;
target.y = e.pageY;
angle = Math.atan2((target.y - localPlayer.getY()),
(target.x - localPlayer.getX()));
// Distance to mouse Check:
var dist = Math.sqrt((localPlayer.getX() - target.x)
* (localPlayer.getX() - target.x) + (localPlayer.getY() - target.y)
* (localPlayer.getY() - target.y));
var speedMult = dist / (canvas.height / 4);
socket.emit("update", {
...
});
}
document.onmousedown …Run Code Online (Sandbox Code Playgroud) 我试图减少拍摄反射表面的照片或视频时产生的眩光; 窗户,眼镜或其他移动设备.
我已经对这个主题做了一些研究,似乎存在一些算法.但我还没有找到一个编码实现.
我需要这个的原因是因为我正在创建一个应用程序,允许您使用设备上的相机在其他设备屏幕上阅读不同的颜色.如果有很多眩光,颜色将无法正确读取.它需要能够区分16种颜色.
是否有任何现有的实现,如果是,我将如何在Android中实现它们?
我更新了Android Studio(Windows).现在我再也找不到Window> Preferences了.他们搬了吗?我现在打开偏好的方式是什么?
我想知道Google Play如何粗略计算顶级应用程序是什么.这是因为我制作了一个应用程序,它的排名是60-70,这比许多其他下载量更多的应用程序要好.因此,我想知道如何评估应用程序,因为它显然不仅仅基于下载次数.
我用Google搜索了很多但我找不到任何东西.有没有人知道它是如何完成的?并根据什么变量/信息?(每日下载?总下载量?)
知道这将是非常有趣和有益的!
我目前正在使用Javascript构建游戏.经过一些测试后,我开始注意到偶然的延迟,这只会是由GC引起的.我决定在它上面运行一个配置文件.结果表明GC实际上是罪魁祸首:
我读到创建新对象会导致很多GC.我想知道是否有这样的事情:
var x = [];
Run Code Online (Sandbox Code Playgroud)
也创建任何Garbage,因为Java中的原始类型不会这样做.由于Javascript中没有真正的类型,我不确定.此外,哪一个最适合创建最少量的垃圾:
选项1:
function do() {
var x = [];
...
}
Run Code Online (Sandbox Code Playgroud)
选项2:
var x = [];
function do() {
x = [];
...
}
Run Code Online (Sandbox Code Playgroud)
选项3:
function do() {
x = [];
...
}
Run Code Online (Sandbox Code Playgroud)
或选项4:
function do() {
var x = [];
...
delete x;
}
Run Code Online (Sandbox Code Playgroud)
选项5:
var x = [];
function do() {
x.length = 0;
...
}
Run Code Online (Sandbox Code Playgroud)
在我的案例中,do函数被称为30次/秒.它在阵列上运行几个操作.
我想知道这一点,因为我只是将我的所有变量全局化以试图阻止它们被GC收集,但GC没有太大变化.
您是否也可以提供一些常见的例子来说明会产生大量垃圾和一些替代品.
谢谢.
我试图根据屏幕尺寸动态扩展我的画布游戏.我理解如何基于屏幕大小来调整画布大小,但我也希望调整内容的大小.基本上我希望游戏在每台设备上看起来都一样.我目前的问题是当有4k屏幕的人玩游戏时,他们可以很容易地看到整个地图.当有人拥有一个非常小的屏幕时,他们几乎看不到任何东西.有一种简单有效的方法吗?我试图做以下事情:
var maxWidth = 1920;
var maxHeight = 1080;
...
function resize() {
c.width = screenWidth = window.innerWidth;
c.height = screenHeight = window.innerHeight;
widthToHeight = screenWidth / screenHeight; // ASPECT RATIO
var scalerAmnt = (maxWidth + maxHeight )
/ (screenWidth + screenHeight);
context.scale(scalerAmnt, scalerAmnt);
}
Run Code Online (Sandbox Code Playgroud)
如果我像这样缩放画布,则会产生不希望的结果.它偏离中心,而且太大了.如您所见,我已设置最大宽度和高度.基本上我试图让游戏在每个设备上看起来都像在具有该分辨率的机器上一样.
现场演示:www.vertix.io
我有一个更新方法,每隔ms更新游戏中的级别.在这个方法中,我有几个for循环,如下所示:
for (int i = 0: i < 10; ++i){
}
Run Code Online (Sandbox Code Playgroud)
当我说:
int i = 0
Run Code Online (Sandbox Code Playgroud)
这会造成很多垃圾吗?还有其他选择吗?
谢谢
是否可以根据触摸事件沿圆形路径移动和旋转图像,如下所示:

我看过这个问题: 基于Android中的触摸事件以圆周运动移动图像 但是它只告诉我如何沿着圆圈移动图像,而不是旋转它.
我正在使用Visualizer绘制我正在播放的声音文件的可视化效果。声波正在显示,但是我想使其更详细,因为它会影响我的帧速率。关于此的文档非常有限。因此,我尝试执行以下操作:
mVisualizer.setCaptureSize(2);
Run Code Online (Sandbox Code Playgroud)
要将捕获率设置为非常低的值。但是,似乎线条绘制的细节相同。我在文档中读到:
Sets the capture size, i.e. the number of bytes returned by getWaveForm(byte[]) and getFft(byte[]) methods.
Run Code Online (Sandbox Code Playgroud)
我遇到的另一个问题是,我想检测正在播放的声音文件中能量较高的声音,以便可以在屏幕上直观地表示它们。例如:屏幕与基线一起闪烁。这是我到目前为止的内容:
public static void setupVisualizer() {
mVisualizer = new Visualizer(mpSong.getAudioSessionId());
mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
mVisualizer.setDataCaptureListener(
new Visualizer.OnDataCaptureListener() {
public void onWaveFormDataCapture(Visualizer visualizer,
byte[] bytes, int samplingRate) {
Game.updateVisualizer(bytes);
}
public void onFftDataCapture(Visualizer visualizer,
byte[] bytes, int samplingRate) {
}
}, Visualizer.getMaxCaptureRate() / 2, true, false);
}
Run Code Online (Sandbox Code Playgroud)
是否可以检测到该听众内部的某些声音?还是有什么选择?对不起,我的英语不好。非常感谢您抽出宝贵时间的朋友。
我使用日期和时间对话框来获取用户指定的事件的日期和时间.该数据是通过执行以下操作转换的:
int yearE = Integer.valueOf(evntDate.split("/")[2]);
int monthE = Integer.valueOf(evntDate.split("/")[1]);
int dayE = Integer.valueOf(evntDate.split("/")[0]);
int hour = Integer.valueOf(evntTm.split(":")[0]);
int min = Integer.valueOf(evntTm.split(":")[1]);
Run Code Online (Sandbox Code Playgroud)
价值观:
eventDate = "3/5/2015";
eventTime = "13:2";
Run Code Online (Sandbox Code Playgroud)
然后我获取该数据并将其转换为毫秒并将其存储在数据库中:
newCalendar.set(yearE, monthE, dayE,hour, min, 0);
startTime = newCalendar.getTimeInMillis();
...
Run Code Online (Sandbox Code Playgroud)
当我从数据库加载信息时,我尝试计算到指定日期之前剩余的时间.所以我做了以下事情:
Long timeL = Long.valueOf(time);
Calendar eventDay = Calendar.getInstance();
eventDay.setTimeInMillis(timeL);
Calendar today = Calendar.getInstance();
long diff = eventDay.getTimeInMillis() - today.getTimeInMillis();
// CONVERT:
int seconds = (int) TimeUnit.MILLISECONDS.toSeconds(diff);
int minutes = (int) TimeUnit.MILLISECONDS.toMinutes(diff);
int hours = (int) TimeUnit.MILLISECONDS.toHours(diff);
int days = (int) TimeUnit.MILLISECONDS.toDays(diff); …Run Code Online (Sandbox Code Playgroud) android ×7
javascript ×4
canvas ×3
algorithm ×1
audio ×1
bitmap ×1
google-play ×1
html ×1
html5 ×1
java ×1
multiplayer ×1
surfaceview ×1
visualizer ×1