我正在尝试学习如何在android中制作一个动画精灵,并且无法弄清楚如何组织我的位图.我有一个我的角色的精灵表向右走:一个五位副本的位图,在一个步行循环中等间距(每45px).
我计划通过以下方式一次绘制我的精灵表位图的一小部分来绘制每个帧:
Rect sourceRect = new Rect(0, 0, 45, 75);
canvas.drawBitmap(spriteSheetBitmap, sourceRect, new Rect(0, 0, 45, 75), null);
Run Code Online (Sandbox Code Playgroud)
然后对于下一帧,将"sourceRect.x"递增45,然后重绘,依此类推.
但是,我现在还不确定如何让我的精灵走向左边.我原本以为我可以只镜像我正在绘制的矩形以获得翻转图片.就像是:
sourceRect = new Rect(45, 0, 0, 75);
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用(不确定这里实际发生了什么,但没有任何东西被吸引到我的表面).
在线搜索,似乎我应该复制我的原始位图,用变换矩阵镜像它,然后在向左走时使用该位图进行绘制.但是我也发现了一些实现,其中许多较小的位图对象是从原始精灵表中创建的,存储(并为镜像运动转换),然后根据需要使用.
所以我想知道在这种情况下最好的是什么,或者确实存在任何差异(性能/内存):
方法1:加载我的原始精灵表,制作一个新的位图实例,镜像它,然后计算所有的矩形并使用那些+两个整张纸来绘制(诚然,有一些额外的位图空间,其中未使用精灵表) .
方法2:在我的原始精灵表中加载,为每个帧创建一个新的两个位图对象(1个镜像,1个正常)并存储要从中绘制的对象.
方法3:其他更好的方法?
我有一个问题,我可以创建一个片段,它的视图似乎被创建,但它没有显示.片段本身是创建的,内部的任何代码都没有问题,但它只是在某处看不见.后退按钮也可以很好地与它交互(它"关闭"它),它只是没有物理地显示在屏幕上(只显示主要布局).
从我的FragmentActivity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_view);
// some logic here that sets a button listener that calls openAddNamePane() when pressed
}
public void openAddNamePane(){
AddNamePane addNamePane = new AddNamePane();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.layout_root, addNamePane, "AddnamePane");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
这是首次显示的View的布局(activity_main_view.xml,也就是我的'根布局'):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
android:background="@color/white"
android:id="@+id/layout_root">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button android:id="@+id/addPlayerButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add Player" />
<Button android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/buttonLabel" />
</LinearLayout>
<ListView android:id="@+id/playerListView"
android:layout_width="match_parent"
android:layout_height="match_parent" …Run Code Online (Sandbox Code Playgroud) 我在ESP8266WebServer上遇到了一些麻烦.我的WebServer {}类包含在ESP8266WebServer对象中,如下所示:
头文件:
#include <WiFiClient.h>
#ifndef WebServer_h
#define WebServer_h
#include "Arduino.h"
class WebServer {
public:
WebServer();
void begin();
void handleClient();
void finishedProcessingData(String clientReply);
String queryString;
private:
// page/url handlers
friend void handleSomeData();
};
#endif
Run Code Online (Sandbox Code Playgroud)
Cpp文件:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include "Arduino.h"
#include "WebServer.h"
ESP8266WebServer server(80);
int aNumberHere = 0;
String queryString = "";
WebServer::WebServer(){
}
void handleSomeData(){
aNumberHere++;
queryString = "";
// this loop appends all the queries fro the query string back into a query string
// …Run Code Online (Sandbox Code Playgroud)